使用MSVC检测内存泄漏的方法如下:

    • 开发环境使用 Visual Studio,或者只下载C++ build tool

    方法1:在程序结束时调用 _CrtDumpMemoryLeaks()

    1. #include <crtdbg.h>
    2. #ifdef _DEBUG
    3. #define new new (_NORMAL_BLOCK, __FILE__, __LINE__)
    4. #endif
    5. int main() {
    6. int* p = new int(42);
    7. _CrtDumpMemoryLeaks();
    8. }

    上面代码有内存泄漏,在调试程序时会有如下提示:
    image.png

    方法2:在开始点使用 _CrtSetDbgFlag(),它在程序退出时自动调用 _CrtDumpMemoryLeaks()

    1. #include <crtdbg.h>
    2. #include <memory>
    3. #ifdef _DEBUG
    4. #define new new (_NORMAL_BLOCK, __FILE__, __LINE__)
    5. #endif
    6. int main() {
    7. _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
    8. auto p = std::make_shared<int>(42);
    9. }

    上面程序没有内存泄漏。