int main (int argc, char * const argv[])
{
int *num = new int[100] ;
return 0;
}
在上面的程序中,存在明确的内存泄漏。但是当运行 - >使用Performance Tool运行 - >泄漏,给出下图,显示没有泄漏的对象。我错过了什么?性能工具是否仅适用于 Objective C 环境?
修改
在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 :(得分: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;
}
如果您在程序等待第二次按键时发生扫描,则应检测到泄漏。