我正在尝试调试一个非常古老的大型 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/