Dangling pointer là gì?

Phrase Programming

Dangling pointer và wild pointer trong lập trình máy tính là những con trỏ (pointer) không trỏ đến một đối tượng (object) hợp lệ thuộc kiểu thích hợp. Đây là những trường hợp vi phạm an toàn bộ nhớ đặc biệt. Nói một cách tổng quát hơn, các dangling reference và wild reference là các tham chiếu (reference) không đến một điểm đến hợp lệ và bao gồm các hiện tượng như link rot trên internet.

Dangling pointer phát sinh trong quá trình hủy đối tượng (object), khi một đối tượng có tham chiếu đến bị xóa hoặc được giải phóng (deallocated), mà không sửa đổi giá trị của con trỏ (pointer), do đó con trỏ vẫn trỏ đến vị trí bộ nhớ của bộ nhớ được giải phóng.

Hệ thống có thể phân bổ lại (reallocate) bộ nhớ đã giải phóng trước đó và nếu sau đó chương trình truy cập vào vùng nhớ mà một con trỏ trỏ tới (dereference) bởi dangling pointer, hành vi không thể đoán trước có thể xảy ra, vì bộ nhớ bây giờ có thể chứa dữ liệu hoàn toàn khác.

Nếu chương trình ghi vào bộ nhớ được tham chiếu bởi một dangling pointer, thì dữ liệu không liên quan có thể bị hỏng âm thầm, dẫn đến các lỗi nhỏ có thể cực kỳ khó tìm.

Trong các ngôn ngữ lập trình hướng đối tượng (object-oriented language) có thu gom rác (garbage collection), các dangling reference được ngăn chặn bằng cách chỉ hủy các đối tượng (object) không thể truy cập được, nghĩa là chúng không có bất kỳ con trỏ nào trỏ đến; điều này được đảm bảo bằng reference counting.

Learning English Everyday