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