30/09/2018, 20:31

Hỏi về vấn đề giải phóng bộ nhớ động

Khi em cấp phát bộ nhớ động , sau đó gán cho nó giá trị thì em không thể delete được!
{
char *a = new char[3];
a = “aa”;
delete[]a;
return 0;
}
Khi debug nó sẽ báo lỗi!
Nhưng khi nhập vào chuỗi đó thì vẫn có thể delete được
Xin mọi người chỉ giúp và cám ơn mọi người!

viết 22:36 ngày 30/09/2018

char* a=new char[3] tức là pointer a trong vùng stack trỏ tới new char[3] trên vùng heap, sau khi gán a="aa" thì pointer a lại đi trỏ vào một string literal (nằm trên vùng constant), mất liên kết với cái vùng nhớ trên heap kia, vùng nhớ này vẫn còn tồn tại ở đó. Nên delete[] a sẽ gây ra lỗi vì lúc này a là một con trỏ tới một chuỗi hằng chứ không trỏ đến vùng nhớ trên heap. Mặc khác, do vùng nhớ trên kia vẫn còn nên dễ gây memory leak. Còn khi bạn nhập một chuỗi thì a vẫn trỏ tới vùng heap đã cấp phát ở trên và sử dụng nó để lưu chuỗi nên không sai.

Bài liên quan
0