2011-03-24 36 views
1
int main (int argc, char * const argv[]) 
{ 
    int *num = new int[100] ; 
    return 0; 
} 

在上面的程序中,有defintely 内存泄漏。但是,当运行 - >与性能工具运行 - >泄漏,给出下图显示没有泄漏的对象。我错过了什么?性能工具仅适用于目标C环境?C++程序与性能比较工具 - 泄漏

Image

编辑:

上的MSVC++ 2010,很容易检测泄漏上调试模式下运行,同时 -

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 

int main (int argc, char * const argv[]) 
{ 
    int *num = new int[100] ; 

    _CrtDumpMemoryLeaks(); // Looking for something equivalent to this 
          // that lets me know whether the program has 
          // memory leaks on an XCode environment. 

    return 0; 
} 
+0

您正在使用完全优化版本运行吗? – Naveen 2011-03-24 04:54:41

+0

@Naveen - 我在调试模式下运行,但不确定*完全优化*。将检查它。 – Mahesh 2011-03-24 04:57:35

+0

@Naveen - 优化级别 - >无。 – Mahesh 2011-03-24 05:03:27

回答

2

leaks不执行后未被释放的块的尸体转储。

相反,它会在运行过程中分析进程并查找不再可访问的已分配块。它根据需要或每10秒扫描一次。

程序更改为类似如下:

int main (int argc, char * const argv[]) 
{ 
    int *num = new int[100] ; 
    char c; 

    puts("memory allocated\npress a key to continue...\n"); 
    c = getchar(); 

    num = NULL; // leak the allocation 

    puts("memory has been leaked\npress a key to continue...\n"); 
    c = getchar(); 

    return 0; 
} 

如果你有扫描发生,而程序正在等待第二个按键就应该检测泄漏。

+0

是否有这样的xcode相当于vs C++ 2010. http://msdn.microsoft。 com/en-us/library/x98tx3cf.aspx – Mahesh 2011-03-24 07:21:20

+0

@Mahesh:你可以试试Wu Yongwei的开源调试分配器:http://wyw.dcweb.cn/leakage.htm - 我没有试过,所以不能担保,但文章表明了很多想法已经进入它。 – 2011-03-25 06:46:35