Có ai biết "kỹ thuật" để khám phá rò rỉ bộ nhớ do con trỏ thông minh gây ra không? Tôi hiện đang làm việc trên một dự án lớn được viết bằng C++ sử dụng nhiều con trỏ thông minh với tính tham chiếu. Rõ ràng chúng tôi có một số rò rỉ bộ nhớ gây ra bởi con trỏ thông minh, mà vẫn được tham chiếu một nơi nào đó trong mã, để bộ nhớ của họ không nhận được free'd. Rất khó để tìm ra dòng mã với tham chiếu "không cần thiết", khiến cho đối tượng tương ứng không được tự do (mặc dù nó không còn sử dụng nữa).Tìm rò rỉ bộ nhớ do con trỏ thông minh gây ra
Tôi tìm thấy một số lời khuyên trên web, đề xuất thu thập các ngăn xếp cuộc gọi của các hoạt động tăng/giảm của bộ đếm tham chiếu. Điều này mang lại cho tôi một gợi ý tốt, đoạn mã nào đã khiến bộ đếm tham chiếu tăng hoặc giảm.
Nhưng những gì tôi cần là một số loại thuật toán nhóm các "ngăn xếp cuộc gọi tăng/giảm" tương ứng lại với nhau. Sau khi loại bỏ các cặp ngăn xếp cuộc gọi này, tôi hy vọng có ít nhất một "tăng ngăn xếp cuộc gọi", hiển thị cho tôi đoạn mã có tham chiếu "không cần thiết", khiến cho đối tượng tương ứng không được giải phóng. Bây giờ nó sẽ không có vấn đề lớn để sửa chữa rò rỉ!
Nhưng có ai có ý tưởng về "thuật toán" có nhóm không?
Phát triển diễn ra theo Windows XP.
(Tôi hy vọng ai đó hiểu, những gì tôi đã cố gắng để giải thích ...)
EDIT: Tôi đang nói về rò rỉ gây ra bởi tham chiếu vòng tròn.
Không chắc chắn tôi hiểu ... bạn có thể tham khảo ngôn ngữ lập trình hoặc nền tảng cụ thể hơn không? Rò rỉ bộ nhớ có thể thay đổi theo cách xử lý của chúng. – zxcv
Con trỏ thông minh thường có nghĩa là C++/STL. –
Có một số sự nhầm lẫn ở đây. Tôi nghĩ rằng nó sẽ có giá trị phân biệt giữa bộ nhớ phân bổ mà không có con trỏ (không nên xảy ra với con trỏ thông minh), rò rỉ gây ra bởi tham chiếu vòng tròn, và các đối tượng có thời gian cuộc sống được mở rộng không cần thiết vì con trỏ được giữ xung quanh. –