30/09/2018, 23:10

VC++ không báo lỗi trả về tham chiếu đến biến cục bộ của hàm

Vấn đề về hàm return 1 tham chiếu đến biến cục bộ được khởi tạo trong hàm. Như mọi người thấy, cùng 1 đoạn chương trình như nhau, nhưng ở Visual studio thì dịch và chạy được, không lỗi, không cảnh báo gì. Nhưng thử với GCC (Cygwin) thì có cảnh báo và lỗi runtime.
Về mặt lý thuyết, khi ra khỏi hàm, biến cục bộ được khởi tạo kia sẽ bị huỷ, vì vậy việc ta return 1 tham chiếu đến nó, sau đó thì biến đó bị huỷ, sẽ xảy ra lỗi do tham chiếu đến 1 biến không tồn tại. Hay ở đây là theo như thằng GCC là hợp lý. Nhưng không hiểu sao bên Visual studio vẫn dịch và chạy ngon, không có lỗi gì.
Ai biết lý do là gì không ạ?

nohat viết 01:23 ngày 01/10/2018

Up Uppppppppp các pro vào giải đáp giúp ạ

Phạm Minh Anh Hữu viết 01:26 ngày 01/10/2018

Compile trên GNU GCC Compiler, có cái warning tuy nhiên vẫn chạy ngon, và thắc mắc như bạn.[spoiler]wtf [/spoiler]

*grab popcorn* viết 01:20 ngày 01/10/2018

Cái này là do linux.
Không rõ tại sao nhưng truy cập vùng nhớ stack đã được giải phóng trên linux là bị segment faults liền.

Phạm Minh Anh Hữu viết 01:23 ngày 01/10/2018

Còn Pointer thì không có warning nốt.

nohat viết 01:27 ngày 01/10/2018

Mình vừa thử lại GCC windows thì chạy được, còn trên cygwin thì ko dc. Chắc do vấn đề quản lý bộ nhớ trên windows và linux khác nhau

nohat viết 01:15 ngày 01/10/2018

Pointer thì ko có warning là dễ hiểu, bởi vùng nhớ vẫn còn đó, nó chỉ xoá biến con trỏ chứ không xoá vùng nhớ nên vẫn truy cập được.

Bài liên quan
0