Về mặt lý thuyết, tôi có thể nói rằng
free(ptr);
free(ptr);
là hỏng bộ nhớ vì chúng ta đang giải phóng bộ nhớ đã được giải phóng.
Nhưng nếu
free(ptr);
ptr=NULL;
free(ptr);
Vì hệ điều hành sẽ hoạt động theo cách không xác định, tôi không thể nhận được một phân tích lý thuyết thực tế cho điều này về những gì đang xảy ra. Dù tôi đang làm gì, bộ nhớ này có bị hỏng hay không?
Giải phóng một con trỏ NULL có hợp lệ không?
delete NULL
không hợp lệ trong C ++. xóa có thể được áp dụng cho các giá trị con trỏ null của kiểu cụ thể, nhưng không áp dụng cho NULL
. delete (int*) NULL
là hợp pháp, nhưng không phải delete NULL
.
ptr
trỏ đến bộ nhớ và bạn không gọi free
nó, thì bộ nhớ sẽ bị rò rỉ. Đặt nó NULL
chỉ làm mất khả năng xử lý của bạn trên bộ nhớ và bị rò rỉ. Nếu điều này ptr
xảy raNULL
, gọi free
là một thao tác không có.
free(ptr)
bằng ptr = NULL
. Không ai nói bất cứ điều gì như thế.