我正在尝试使用Xcode工具(5.0.1)搜索C ++项目的内存泄漏。考虑一下:
#include <iostream>
#include <chrono>
#include <thread>
class Person
{
public:
int _age;
};
int main(int argc, const char * argv[])
{
Person* pers1 = new Person();
pers1->_age = 25;
std::cout << "Pers1 age is " << pers1->_age << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
return 0;
}
我没想到&#34; Leaks&#34;仪器报告任何泄漏,因为
泄漏[...]并不知道你将如何处理你的指针。它所知道的是,每个分配的内存块仍然在某处被引用。
正如Zneak所指出的那样in his answer to a similar question。 *
但是,我很惊讶Allocations没有暗示正在分配的Person
对象,并随后泄露。
为了让仪器报告此程序泄漏,我需要做什么(_pers1 = NULL;
除外)?或者根本没有泄漏,我误解了C ++的内存分配模型?每个new
运营商呼叫都不必与delete
呼叫匹配吗?
*)在同一个答案中,正在提出索赔
如果发生泄漏,您必须丢失必须分配内存的引用。
对于堆内存没有被分配所述内存而不是&#34;泄漏&#34;的程序释放,我没有更好的说法。所以从技术上来说,我所询问的可能不是“泄漏”,但我认为很清楚我在想什么现象。
答案 0 :(得分:1)
您的pers1
变量仍在范围内,直到主函数结束,因此内存不会被报告为泄露。一旦内存泄漏,程序就会终止。
如果你想让内存泄漏,可以将main主体的前三行放在另一个函数中,然后在调用sleep之前从main调用该函数。它应该能够报告内存泄漏,因为程序仍在运行,但pers1
变量将不再在范围内。