循环中的Free和Malloc - 释放内存的正确方式?

3
我可以帮你进行翻译。以下是需要翻译的内容:

我有以下循环(代码简化):

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方法中只使用free(array)吗?

谢谢。


规则是每次调用malloc都需要调用1次free。如果您在循环中使用malloc分配数据,则需要在相同类型的dealloc循环中释放数据。 - Joe
谢谢Joe。我如何跟踪dealloc中要释放的内容? - GuybrushThreepwood
你只展示了一个object->item1的例子。这意味着你的dealloc至少需要free(object->item1)。如果你使用malloc分配了每个numbers项,那么你也需要释放每个数字项。 - Joe
正确,但是我该如何存储对object->item1的引用?我认为我需要这样做,然后将引用添加到列表中,以便我可以释放(在这种情况下)所有20个mallocs? - GuybrushThreepwood
如果您发布一个代码示例,展示您如何使用malloc分配数据,我将回复一个答案,告诉您如何编写相应的dealloc函数。 - Joe
Joe - 感谢您的帮助。我已将这两种方法放在上面。谢谢。 - GuybrushThreepwood
1个回答

2

你需要将malloc返回的指针传递给free来释放内存。

如果你已经通过一次调用 malloc分配了一个结构体数组,你可以(也必须)一次性释放整个数组。

如果你是逐个分配结构体,那么你也必须逐个释放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接