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!
Bài liên quan
char* a=new char[3]
tức là pointer a trong vùng stack trỏ tớinew char[3]
trên vùng heap, sau khi gána="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êndelete[] 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.