gpt4 book ai didi

c++ - 程序终止时,仪器不会捕获未删除的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:09 25 4
gpt4 key购买 nike

为了演示,我创建了这个简单的控制台应用程序:

#include <iostream>

class Person {
public:
int mAge;
};

int main(int argc, const char * argv[])
{
Person *iPerson = new Person();
iPerson->mAge = 15;

std::cout << "Age: " << iPerson->mAge;
return 0;
}

现在我知道 Valgrind 和 CPP Check 将识别此处的泄漏,但测试 Apple 的 Instruments 时,当我分析这段代码时,我看不到任何泄漏。这是尽管 iPerson 从未被删除。

最佳答案

我已经解决了:

  • 我必须将快照间隔设置为 1 秒。
  • 我必须禁用(设置为“无”)发布版本的优化(已对其进行分析)。

然后根据justin的回复和this question ,我不得不像这样修改我的代码:

#include <iostream>
#include <unistd.h>

class Person {
public:
int mAge;
};

void CreateLeaks()
{
// All three lines will generate a leak.
Person *iPerson = new Person();
iPerson = new Person();
iPerson = new Person();
}

int main(int argc, const char * argv[])
{
CreateLeaks();

sleep( 2 );
return 0;
}

还有一些奇怪的事情在发生。例如,如果您开始在 CreateLeaks 中添加 sleep(2),Instruments 不会捕获所有泄漏(取决于您放置 sleep 的位置命令。奇数。

关于c++ - 程序终止时,仪器不会捕获未删除的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13327897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com