1

我的程序出现严重的内存泄漏问题。我正在使用Apple的乐器来追踪我的泄漏,并且在我的应用程序启动后的最初几秒钟内,列出了数百和数百个泄漏。问题是他们没有一个人似乎告诉我泄漏是从哪里来的。修复Cocoa/ObjC中的内存泄漏

我已经通过我的所有类过去了,确信任何被alloced在年底发布,并垃圾收集被启用为好。另一个大问题是我尝试启动我的应用程序而没有启用垃圾回收,它只是崩溃。

有什么建议吗?

感谢

编辑:如果需要的源代码,然后我就可以通过电子邮件发送

回答

2

您的问题被标记为“垃圾回收”。

你打开了GC吗?如果是这样,它是一个命令行工具吗?你调用objc_startCollectorThread()作为main()中的第一项吗?

如果您有GC打开,泄漏豹分析会显示在某些情况下,相当多的误报。如果您有权访问Snow Leopard,我建议您在工具得到显着改善的情况下进行分析。

该铛静态分析器&仪器是完全正交的。你需要使用两者,因为静态分析器不会在代码中找到所有可能的泄漏。特别是,它不会发现情况 - 比如说,您拥有无限的缓存增长或全局可变集合,无意中将您的对象图形化为根。

一旦你解决了静态分析仪发现的所有问题,然后使用仪器。

+0

GC已打开,它是Cocoa GUI应用程序,而不是命令行工具。我已经修复了分析仪报告的所有泄漏,但仪器仍然因为我不知道的原因而报告了大量的内存泄漏。我不知道我的应用程序中的泄漏发生在哪里。 – indragie 2009-08-17 17:45:39

+0

我也有这些的malloc:free_garbage错误在Xcode调试控制台当我开始我的应用程序: MyApp的(9874,0xb0103000)的malloc:free_garbage:垃圾PTR = 0x101bfb0,已经非零引用计数= 1 还有像10每次启动时,每个都有不同的地址代码(例如0x101bfb0) – indragie 2009-08-17 18:31:11

+1

如果您有权访问它,请使用Snow Leopard进行开发。内存分析工具 - GC和非 - 是更好的一倍。 – bbum 2009-08-18 17:57:14

2

试图通过AnalysisTool运行项目,看看有什么发现。它基本上是Clang静态分析器的GUI前端。它会遍历你的代码,并发现诸如泄漏和错误版本等错误。然后它会逐步呈现给你,帮助你更好地理解犯错的地方。

这是一个神奇的工具。

+1

+1我一直使用铿锵静电分析仪 – 2009-08-17 16:20:18

+0

非常感谢的家伙,该工具比仪器好得多。我会看到我可以修复的:) – indragie 2009-08-17 16:34:42

+0

我修复了AnalysisTool和Instruments报告的所有内容,但仍报告了很多内存泄漏 – indragie 2009-08-17 17:41:45