在编写程序的时候,很多时候出现了内存泄露却不知道该从哪里找.当然,从源头上制止这种现象才是最重要的,但是,有的时候做不到这一点,那么怎么找出这些讨厌的bug呢?下面介绍一些方法: 在头文件中或者源码文件中包含 /* for memory leak detect */ #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> PS:这些文件的顺序不要改变 然后,在主函数开始的地方添加 _CrtDumpMemoryLeaks(); //针对一个出口的情况 或者 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); //针对多个出口 那么在调试的结束之后,会有类似信息输出: {831} normal block at 0x0C7D4630, 8320 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {830} normal block at 0x0C7D1530, 12480 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 {764} normal block at 0x02BCCE48, 320 bytes long. Data: < C 9 : e;> 00 00 00 00 43 A7 CC 39 D0 92 CC 3A D6 FE 65 3B {763} normal block at 0x02BCCD68, 160 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Okay,那么现在你可以使用: _CrtSetBreakAlloc(831); 来跟踪第一个内存泄露了.注意,这里的831表示应用程序第831次分配内存,它可能会变化的,所以需要多试几次以找到稳定的分配次数来定位. 如果不出意外,那么在添加了_CrtSetBreakAlloc之后会在分配内存的时候断下来,这样你就知道是什么时候分配内存的出的泄露了. 有一点疑惑的是我对一个应用程序试了,怎么都找不到内存泄露的地方.而且确定分配内存的行号没有变化.知道的告诉一声.