c++ - 检测到内存泄漏

标签 c++ windows memory-leaks

我正在尝试调试一个非常古老的大型 C++ 项目。它给出了以下错误:

 Detected memory leaks!
 Dumping objects ->
 {629} normal block at 0x0000000000084CA0, 16 bytes long.
 Data: <   ?            > D0 A7 F0 3F 01 00 00 00 00 00 00 00 00 00 00 00 
 {628} normal block at 0x0000000000084C20, 16 bytes long.
 Data: <   ?            > 10 A9 F0 3F 01 00 00 00 00 00 00 00 00 00 00 00
 {5667963} normal block at 0x000000000709FB20, 88 bytes long.
 ....
 ....
 Data: <p       3       > 70 D0 0F 07 00 00 00 00 33 00 00 00 00 01 00 00 
 Object dump complete.
 The program '[4892] Classifier.exe' has exited with code 0 (0x0).

我无法粘贴程序,因为它太大了,但它是这样的

 void main(int argc, char *argv[]) 
 {
     try 
     {

    _CrtDumpMemoryLeaks(); //memory leak detection
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);   
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);  
    ....
    ....
     }
     catch()
    {   ....
    }
 }

在 Debug模式下,程序运行成功。但是,在输出中我看到了上面的错误消息。 在输出的任何地方我都找不到行号,它会给我关于检测到内存泄漏位置的信息。

我需要添加什么才能查看行号吗?

谢谢

最佳答案

在_CrtSetDbgFlag 之后添加这一行

 _CrtSetBreakAlloc(629);

629就是你在转储日志中看到的,它通常表示629分配的内存。再次运行调试,您将在该分配处停止,然后您可以检查调用堆栈以查看那是什么。

关于c++ - 检测到内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41580058/

相关文章:

C++ 字符串字面量数据类型存储

c++ - NULL vs nullptr(为什么被替换了?)

java - RythmEngine 和 TemplateClassManager 堆的最大对象 : memory leak problems

c - 为什么 b 数组不复制整个 a 数组?

windows - Subversion 部署到 Windows 环境

java - HtmlUnit 关闭所有窗口内存泄漏

c++ - 当我 try catch [this] 时,用于回调函数的 lambda 表达式失败,为什么?

c++ - Qt/C++ - 将 QHostAddress 转换为 QString

Windows 上的 python 多处理

Windows 网络共享上的 Ruby Dir.glob