Nếu bạn đang sử dụng Visual Studio, Microsoft cung cấp một số chức năng hữu ích để phát hiện và gỡ lỗi rò rỉ bộ nhớ.
Tôi sẽ bắt đầu với bài viết này:
https://msdn.microsoft.com/en-us/l Library / x98tx3cf (v = vs.140) .aspx
Dưới đây là tóm tắt nhanh chóng của những bài viết. Đầu tiên, bao gồm các tiêu đề này:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
Sau đó, bạn cần gọi điều này khi chương trình của bạn thoát:
_CrtDumpMemoryLeaks();
Ngoài ra, nếu chương trình của bạn không thoát ra ở cùng một nơi mỗi lần, bạn có thể gọi đây khi bắt đầu chương trình:
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
Bây giờ khi chương trình thoát khỏi tất cả các phân bổ không miễn phí sẽ được in trong Cửa sổ đầu ra cùng với tệp chúng được phân bổ và xảy ra phân bổ.
Chiến lược này hoạt động cho hầu hết các chương trình. Tuy nhiên, nó trở nên khó khăn hoặc không thể trong một số trường hợp nhất định. Sử dụng các thư viện bên thứ ba thực hiện một số khởi tạo khi khởi động có thể khiến các đối tượng khác xuất hiện trong kết xuất bộ nhớ và có thể khiến việc theo dõi rò rỉ của bạn trở nên khó khăn. Ngoài ra, nếu bất kỳ lớp nào của bạn có các thành viên có cùng tên với bất kỳ thói quen cấp phát bộ nhớ nào (như malloc), các macro gỡ lỗi CRT sẽ gây ra sự cố.
Có các kỹ thuật khác được giải thích trong liên kết MSDN được tham chiếu ở trên cũng có thể được sử dụng.