thể trùng lặp:
Setting variable to NULL after free …Nó luôn luôn là một thực hành tốt để thiết lập con trỏ đến NULL sau khi miễn phí() - ing chúng?
Tôi đang tìm hiểu về thực hành lập trình C tốt và một người bạn của tôi nói với tôi luôn đặt con trỏ đến NULL sau miễn phí() ing họ (hay gọi một chức năng giải phóng cụ thể).
Ví dụ:
char* ptr = malloc(100);
...
free(ptr);
ptr = NULL;
hoặc
struct graph* graph = create_graph();
...
destroy_graph(graph);
graph = NULL;
Tại sao điều này là một thực hành tốt?
Cập nhật: Sau khi đọc câu trả lời, có vẻ như là một thực tế khủng khiếp đối với tôi! Tôi đang ẩn các lỗi có thể có đôi() miễn phí. Làm thế nào điều này có thể là một thực hành tốt? Tôi bị sốc.
Cảm ơn, Boda Cydo.
@bodacydo Hãy xem các câu hỏi "có liên quan" ở bên phải của trang. –
Cảm ơn Neil và Michael. Câu hỏi đó thực sự trả lời câu hỏi của tôi. Sau khi đọc các câu trả lời tôi có một câu hỏi khác - không thiết lập con trỏ để NULL thực sự ẩn lỗi? Double free() không còn bị phát hiện nữa! Tôi bây giờ bối rối vì điều này thực sự che giấu những sai lầm khi hiển thị. – bodacydo
Bằng cách nào? Giải phóng con trỏ và đặt nó thành NULL cho phép bộ nhớ được giải phóng. Nếu sau đó bạn quyết định miễn phí NULL, bạn sẽ nhận được một khẳng định hoặc một số cảnh báo khác.Bộ nhớ giải phóng đôi là khó khăn hơn nhiều để theo dõi hơn giải phóng NULL. –