int* foo = new int[10];
foo = NULL;
sleep(60);
仪器在上面的代码中没有发现任何泄漏,我如何使用仪器工具来发现C或C++代码泄漏。我对堆栈溢出的大部分解释都是基于目标C代码。。。
问题是编译器将优化以下代码片段中对new
的调用:
int* foo = new int[10];
foo = NULL;
sleep(60);
因为它足够聪明,知道它没有被使用。若您添加代码以使用foo
,那个么编译器就不会这么做,并且您应该看到您期望的泄漏:
int* foo = new int[10];
foo[3] = 23;
foo[8] = 45;
printf("%d %dn", foo[3], foo[8]);
foo = NULL;
sleep(60);