2011-12-13 82 views
3

我有下面的循環(簡化代碼):免費和Malloc在循環 - 正確的方式來釋放內存?

for (int y = 0; y < 20; y++) { 

self.array[y].numbers = [self getNumberData:source objectPass:object]; 

} 

這將調用得到NumberData方法。在這個代碼中使用malloc方法,例如:

object->item1 = malloc(sizeof(Class) * object->item2); 

我的問題是我如何正確釋放malloced內存?

self.array [y] .numbers是一個C結構。

我可以只將自由(數組)放在dealloc方法中嗎?

謝謝。

+0

規則是每次調用'malloc'需要1次調用'free'。如果你在一個循環中有'malloc'數據,那麼你將需要在'dealloc'中的同一種'loop'中釋放數據。 – Joe

+0

謝謝喬。我如何跟蹤在dealloc中發佈的內容? – GuybrushThreepwood

+0

您只顯示'object-> item1'的例子。這意味着你的'dealloc'至少需要'free(object-> item1)'。如果你爲每個數字項目添加'malloc',那麼你還需要'釋放'每個數字項目。 – Joe

回答

2

您必須將由malloc返回的指針傳遞給free

因此,如果你已經編輯了整個陣列中的所有結構,你可以(也必須)free整個事情。

如果您已經分別編輯了每個結構,則每個結構也必須爲free