2011-06-02 107 views
1

我有一行代碼:哪裏是內存泄漏

CGFloat *components = CGColorGetComponents([color CGColor]); 

和分析儀是說,有泄漏這裏。 我嘗試免費(組件),但當我這樣做時,應用程序崩潰。 這裏真的有泄漏,因爲我沒有分配任何東西。我知道CGColorGetComponents返回一個3 CGFloat的數組,但是當我嘗試釋放它時它崩潰了。

任何幫助表示讚賞。

+0

您是否正在對設備或模擬器上的應用程序進行泄漏分析?我在模擬器上有分析儀誤報泄漏。 – highlycaffeinated 2011-06-02 19:29:44

+0

運行分析儀對設備 – 2011-06-02 19:31:40

+0

靜態分析儀警告您泄漏?還是你看到泄漏儀器泄漏? – 2011-06-02 19:56:27

回答

1

請參閱SO #792119

聲明變量不會創建數組。實際上,CGColorGetComponents也沒有。無論創建CGColor對象創建數組並將其存儲在對象內部, CGColorGetComponents讓你有指向存儲的指針。

總之,不要釋放你的指針。

但是,您可以將其設置爲NULL。

+0

我明白,因爲我不是實際分配CGFloat數組的人,所以我不應該有責任釋放它。但是因爲我在那個地方發生泄漏,我應該在實際完成後真正分配自己的數組並釋放它嗎? – 2011-06-02 19:34:55

+0

如果您需要複製數據,請僅分配您自己的陣列。 – jp2code 2011-06-02 20:37:36

+0

作爲一個測試,你可以創建一個只有這個'CGColorGetComponents'調用的項目嗎?看看分析儀是否仍然告訴你存在內存泄漏。如果是這樣,我會懷疑'CGColorGetComponents'而不是你的代碼。 – jp2code 2011-06-02 20:39:42

0

也許你應該通過color.CGColor作爲參數? 看看這個主題:What does CGColorGetComponents() return?

+0

const CGFloat * CGColorGetComponents( CGColorRef color ); 它實際上是它自3個CGFloat的 – 2011-06-02 19:31:55

+1

顏色組成的數組.CGColor只是[color CGColor]的語法糖,並被編譯器轉換爲後者。 – 2011-06-02 21:25:48