我怎么能有Xcode仪器报告未分配的内存泄露

How can I have Xcode Instruments report un-allocated memory as leaked?

本文关键字:分配 内存 报告 怎么能 Xcode 仪器      更新时间:2023-10-16

我正在尝试使用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;
}

我不期望"Leaks"仪器报告任何泄漏,因为

泄漏[…不知道你要用你的指针做什么。它只知道分配的每个内存块仍然在某个地方被引用。

正如Zneak在回答类似问题时指出的那样。*

然而,我很惊讶的是,Allocations没有提示正在分配Person对象,并且随后泄露。

我要做什么(除了_pers1 = NULL;)才能得到仪器报告这个程序正在泄漏?或者这里根本没有泄漏,我误解了c++的内存分配模型?难道每个new操作符呼叫都必须与delete呼叫匹配吗?


*)在同一个答案中,有人声称

要发生泄漏,您必须丢失对已分配内存的引用。

我没有比"泄漏"更好的词来形容分配内存的程序没有释放堆内存。所以从技术上讲,我所问的可能不是一个"泄漏",但我认为很清楚我在想什么现象。

您的pers1变量在main函数结束之前仍然在作用域中,因此内存永远不会被报告为泄漏。一旦内存泄漏,程序就会终止。

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