2011-03-21 54 views
1

我已經寫了一個簡單的程序在C和objC的泄漏,我不明白Leaks。 那就是:任何人都可以使用泄漏? (來自儀器)

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

它可以告訴我這是可變的泄漏,或者它泄漏?

互聯網上的每一個Leaks教程(所有這兩個)都很糟糕。

請幫忙?

+0

也許你可以告訴我們泄漏的代碼。 – 2011-03-21 10:32:02

回答

0

我還沒有使用泄漏,但網上有很多教程,從蘋果的 - Apple's developer documentation on the subject,Mobile OrchardCocoa is my Girlfriend,這似乎是最好的。

+0

我會再試一次..我已經看到了所有這些,但我仍然無法使用它。只有我嗎? – pvinis 2011-03-21 10:49:18

+0

也許!如果您使用XCode 4,那麼靜態分析可以很好地發現潛在的泄漏,您可以嘗試。 – GoatInTheMachine 2011-03-21 10:59:47

+0

我使用靜態分析,但它到目前爲止。如果我在其中添加一個帶有t的printf,則分析不會顯示任何內容。 – pvinis 2011-03-21 11:03:55

3

如果您使用您提供的代碼測試Leaks儀器,那麼它無法發現任何問題也就不足爲奇了。

  • 泄漏的默認快照間隔爲10秒。但是你的程序甚至不會運行10秒。
  • 您正在分配應用程序入口點的範圍。 「t」有效(未釋放時)直至主要退出。所以操作系統無論如何都會回收內存。
  • 最重要的是:您的代碼不包含泄漏。如果你對t的「寬鬆參考」,這將是一個泄漏。 (做另一T =的malloc(EG)或指定牛逼其他一些變量)

如果你想在行動中看到泄漏,創建一個默認的Cocoa應用程序,實例變量「測試」添加到您的AppDelegate,並把將下面的代碼放到執行中。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    test = malloc(50); 
    test = malloc(20); 
} 
+0

我做到了。它顯示了兩個分配,並且有0個泄漏。 – pvinis 2011-03-21 11:19:20

+0

您是否在頭文件中聲明瞭「test」?您使用的是哪種版本的Xcode /樂器?我只是雙重檢查了我在上面發佈的代碼,它清楚地顯示了與第二個malloc一致的1個泄漏。 – 2011-03-21 12:55:35

+0

你可以上傳你的項目的郵編嗎?我使用xcode 4 – pvinis 2011-03-21 13:09:12