任何人都可以使用泄漏吗? (来自仪器)

Posted

技术标签:

【中文标题】任何人都可以使用泄漏吗? (来自仪器)【英文标题】:Can anybody use Leaks? (from Instruments) 【发布时间】:2011-03-21 10:28:37 【问题描述】:

我用 C 和 objC 编写了一个带有泄漏的简单程序,我无法理解 Leaks。 在这里:

int main(void) int t = 78; t = malloc(50); t = 4; return 0;

它可以告诉我哪个变量是泄漏的,或者它在哪里泄漏?

互联网上的每个Leaks 教程(所有两个)都很糟糕。

请帮忙?

【问题讨论】:

也许您可以向我们展示有泄漏的代码。 【参考方案1】:

如果您使用您提供的代码测试 Leaks 工具,难怪它无法发现任何问题。

Leaks 的默认快照间隔为 10 秒。但是您的程序甚至不会运行 10 秒。 您在应用程序入口点的范围内进行分配。 "t" 在 main 退出之前是有效的(当没有被释放时)。所以操作系统无论如何都会回收内存。 最重要的是:您的代码不包含泄漏。如果您“松散引用” t,那将是一个泄漏。 (例如,通过执行另一个 t = malloc() 或分配 t 其他变量)

如果您想查看泄漏的实际效果,请创建一个默认的 Cocoa 应用程序,将实例变量“test”添加到您的 AppDelegate 并将以下代码放入实现中。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

   test = malloc(50);
   test = malloc(20);

【讨论】:

你是否在头文件中声明了“test”?您使用的是哪个版本的 Xcode/Instruments?我只是仔细检查了上面发布的代码,它清楚地显示了与第二个 malloc 一致的 1 个泄漏。 确实是你的作品。但是如何查看代码中的泄漏点? 查看 → 扩展细节。这显示了导致泄漏的调用堆栈。【参考方案2】:

我没用过Leaks,但是网上有很多教程,从苹果的Apple's developer documentation on the subject、Mobile Orchard和Cocoa is my Girlfriend开始,好像是最好的。

【讨论】:

我会再试一次。。这些我都看过了,但还是不能用。只有我吗? 也许吧!如果您使用的是 XCode 4,那么静态分析可以很好地发现潜在的泄漏,您可以尝试一下。 我使用静态分析,但到目前为止。如果我在其中添加一个带有 t 的 printf,那么分析什么也不会显示。

以上是关于任何人都可以使用泄漏吗? (来自仪器)的主要内容,如果未能解决你的问题,请参考以下文章

发送邮件时 MFMailcomposeviewcontroller 的内存泄漏

IPHONE:使用仪器分析泄漏

应用程序启动后仪器泄漏停止

使用仪器检查 xcode 4 中的内存泄漏

仪器(泄漏)不工作

如何解决 iOS App 中的内存泄漏问题?