【问题标题】:Simple use of Leaks Instrument on a console application在控制台应用程序上简单使用 Leaks Instrument
【发布时间】:2011-05-08 15:40:18
【问题描述】:

我想要一个关于如何使用泄漏工具的简单示例。
见:

#include <iostream>

int main (int argc, char * const argv[]) {
  char *buf = new char[100];

  sprintf(buf, "Hello, World!\n");
  // insert code here...
  std::cout << buf;
  return 0;
}

上面的代码(简单示例)应该会泄漏分配在 *buf 上的指针,对吧?
使用 valgrind,我会在运行后发现这很容易
但我只是无法在 Leaks 程序中找到如何做到这一点
我试着把 sleep(60) 放了,但对我还是不友好...

谢谢,
乔纳森

【问题讨论】:

  • 问点什么。此外,显示的代码中没有泄漏。
  • 他是说因为他没有释放 buf,所以这是一个泄漏,但是由于程序在我不知道这是否算作泄漏之后立即终止,因为内存将立即恢复。我也认为应该是 'char* buf' 而不是 'char buf'
  • @robev 好电话。我错过了给 buf 的糟糕分配。我的眼睛读到它是在堆栈上声明的。不过,他什么也没问。
  • 我想解释一下如何在“泄漏”工具上找到该泄漏。我只是输入了那个代码,以为你会明白我的意思......当然它应该是 char *buf,我的意图是创建一个内存地址,而不是释放它以查看 Leaks 是否会像 Valgrind 那样告诉我.对不起我的英语......

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


【解决方案1】:

我发现 Leaks 不能很好地与快速退出的命令行应用程序一起工作。我建议像您所做的那样添加一个sleep(),但在主程序逻辑之前添加一个,然后在最后添加一个,这样 Leaks 就可能对泄漏状态进行采样。

int main() {
  sleep(20); // 20s may be enough
  {
     // do leaky operations, then local variables will go out of scope
  }
  sleep(20);
}

【讨论】:

  • 你能给我一个简单的应用程序的例子,它会泄漏一些东西,你可以在 Leaks 工具上看到它吗?
  • 我已经有一段时间没有尝试过了,但是当开始和结束有延迟时,我能够从中获得一些有用的输出。您也可以尝试附加到该进程(以便在第一个睡眠期间捕获它)。还可以尝试在该点创建一个标记,以便显示该点的增量。
猜你喜欢
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多