如何让Xcode Instruments报告未分配的内存泄露?

时间:2014-03-12 13:44:44

标签: c++ xcode memory-management memory-leaks

我正在尝试使用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;的程序释放,我没有更好的说法。所以从技术上来说,我所询问的可能不是“泄漏”,但我认为很清楚我在想什么现象。

1 个答案:

答案 0 :(得分:1)

您的pers1变量仍在范围内,直到主函数结束,因此内存不会被报告为泄露。一旦内存泄漏,程序就会终止。

如果你想让内存泄漏,可以将main主体的前三行放在另一个函数中,然后在调用sleep之前从main调用该函数。它应该能够报告内存泄漏,因为程序仍在运行,但pers1变量将不再在范围内。