带有性能工具的C ++程序 - 泄漏

时间:2011-03-24 04:51:37

标签: c++ performance memory-leaks xcode3.2

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

在上面的程序中,存在明确的内存泄漏。但是当运行 - >使用Performance Tool运行 - >泄漏,给出下图,显示没有泄漏的对象。我错过了什么?性能工具是否仅适用于 Objective 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;
}

1 个答案:

答案 0 :(得分: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; 
}

如果您在程序等待第二次按键时发生扫描,则应检测到泄漏。