use*_*536 2 c++ xcode memory-leaks
我在Xcode中的一个简单的C++控制台项目中有以下内容.当我使用乐器Leaks运行时,Xcode没有标记任何内存泄漏,即使有一个明显的漏洞.到底是怎么回事 ?有帮助吗?
#include <iostream>
int main (int argc, char * const argv[]) {
// insert code here...
int *x = new int[20];
x[0] = 10;
std::cout << "Hello, World!\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您的代码中没有泄漏.要发生泄漏,您必须丢失必须分配内存的引用.在您的情况下,您不再使用分配的内存,但仍然保留对它的引用.因此,Leaks认为你可能会在某些时候将其释放,并且不认为它是泄漏.(作为提醒,泄漏是指分配内存,然后处理指针而不释放内存.)
这个程序应该让Leaks生气:
int main()
{
int* foo = new int[10];
foo = NULL;
sleep(60);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,new int[10]当foo被覆盖时,返回的内存地址会无可挽回地丢失NULL.因此,Leaks应该发现它.
泄漏不是一种静态分析工具.它不知道你要用你的指针做什么.它所知道的是,每个分配的内存块仍然在某处被引用.
泄漏也不是一个实时工具.一旦发生泄漏,它就不会发现泄漏.相反,每10秒左右,它会冻结程序,扫描其内存并尝试查找对其所有已分配内存块的引用.如果没有找到任何特定块,则将其标记为泄漏.因此,如果你的程序执行时间不到10秒,那么Leaks显然不会有任何帮助.
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |