30/09/2018, 16:58

Code thế này có gọi là bị leak memory không?

int *p;
int *q;
int *d;
p = new int(10);
q = p;
d = q;
delete p;

Trên là ngôn ngữ C++, code như trên có bị leak mem không?
Anh em thảo luận nhé.

Bùi Trung Thông viết 19:06 ngày 30/09/2018

theo mình là có chắc chúng trỏ về 1 thằng thôi, delete 1 phát là mấy thằng kia lang thang rồi.

Coulson viết 19:14 ngày 30/09/2018

Trong trường hợp này memory không bị leak.
Bởi vì 3 con trỏ p, q, d đều trỏ tới cùng vùng nhớ nên delete con trỏ nào cũng sẽ giải phóng vùng nhớ đã cấp phát.

Nhưng để an toàn thì sau khi giải phóng vùng nhớ, nên gán d = p = q = NULL;
để tránh trường hợp vô tình dùng con trỏ để truy xuất vào vùng nhớ đã được giải phóng.

Bài liên quan
0