RT系统代码量有点大(含30多个类),
vs2008开发环境,
纯C/C++的(即不含MFC、数据库之类的);只有三分之一的代码是我自己写

现在的任务是要排查代码是否存在内存泄露,
本人菜鸟,请各位支点招(推荐一些工具或方法或建议)非常感谢!!!

解决方案 »

  1.   

    http://blogold.chinaunix.net/u3/109695/showart_2188730.html
      

  2.   

    google一下 Visual Leak Detector
    很多类似的工具 检测内存泄露
      

  3.   

    Visual Leak Detector
      这个工具不错的
      

  4.   

    你再单独创建一个线程,while(1)
    {
       Sleep(10000);   // 用API GlobalMemoryStatus 记录内存状态 
    }这样,通过查看记录,就可以知道是否存在内存泄露,如果发现了,就屏蔽一些代码 ,再测试,如此反复,就可以了
      

  5.   

    不用啊。VC里你程序直接关闭,假如有泄漏的话,就有提示的呀。。比如你直接 char *p = new char[100]; 不释放 直接关闭就会有提示的呀。。要是你的程序里是一直申请,到关闭的时候都正常释放的就不好搞了。。估计那些工具也不大管用吧。。不过你可以把new给重载,然后做好统计,把哪个地方申请最多的,给打出日志看一下 
      

  6.   

    用Visual Leak Detector按照网上的说法来配置环境,,出现这个错误:1>.\vld.lib : general error c1010070: Failed to load and parse the manifest. {_~0v怎么解决?
      

  7.   

    crt,vc自己的程序包就有这个能力 
      

  8.   

    就是啊
    IDE给的信息不够用么
      

  9.   


    Visual Leak Detector已经试用过,确实如你所说,好像只对很小的程序比较管用
      

  10.   

    我查了下怎样使用CRT先
      #define _CRTDBG_MAP_ALLOC
      #include <stdlib.h>
      #include <crtdbg.h>
    然和在一些地方加
    _CrtDumpMemoryLeaks();但是好像得到的信息有限,下面是我写的一个测试程序
    void ff()
    {
    int *p = new int[512];
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    for (int i = 0; i < 1; i++)
    {
    ff();
    printf("succes!/n");
    } _CrtDumpMemoryLeaks(); return 0;
    }
    output窗口里显示的
    'test.exe': Loaded 'E:\charRecognition\test\Debug\test.exe', Symbols loaded.
    'test.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll'
    'test.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll'
    'test.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcr90d.dll', Symbols loaded.
    Detected memory leaks!
    Dumping objects ->
    {96} normal block at 0x00399220, 2048 bytes long.
     Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
    Object dump complete.
    The program '[5320] test.exe: Native' has exited with code 0 (0x0).只知道有内存泄露,根本就不晓得哪里有泄漏
      

  11.   


    直接关闭程序就有提示???
    好像没看到有提示啊。。请教该怎么看?
    所说的IDE是指集成开发环境么??我用VS2008的话,请教如何使用vc+ IDE查看是否存在内存泄露???本人菜鸟,求指教!
      

  12.   

    恩,Visual leak detected不错的,用法也比较简单
      

  13.   

    已经试用过这个方法,好像和CRT差不多对于小程序,能提示发生内存泄露的行号等详细信息但是对大程序好像就不行了,只告诉发生能内存泄露,但是不知道是哪里存在泄漏。
      

  14.   

    Visual Leak Detector
    boundcheck
    Visual Leak Checker
      

  15.   

    就在Debug下执行F5后退出,如没提示就没有
      

  16.   


    控制台程序的话,木有看到提示。貌似MFC的话,可以看到
      

  17.   

    微软的 CRT 本身里面有一套内存泄露的函数的MFC程序由于DEBUG_NEW的存在所以应该是支持内存检测的,你可以用debug配置生成以下
    2010应该没有变化,内部还是调用CRT内存泄漏检测函数。看看这个:http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx和这个:http://msdn.microsoft.com/en-us/library/c99kz476.aspx