所以我创建了一个链表并打印出结果,但是当我尝试取消分配列表时它不起作用。
我正是这样做的:
node = root;
node = [node next];
while([node next] != nil)
{
ListNode *temp;
temp = [node next];
free(node);
node = temp;
}
问题是当我运行它时,我收到一条错误消息:Error in ./a.out: free(): invalid pointer: 0x0909720c
我不明白错误信息的含义,我不知道如何修复它。
这是界面:
@interface ListNode : NSObject
{
@private
int value;
ListNode* next;
}
- (id) setValue: (int) value_value;
- (int) value;
- (id) setNext: (ListNode*) next_value;
- (ListNode*) next;
@end
答案 0 :(得分:0)
Objective-C中的每个对象都有一个“保留计数”,当保留计数变为零时,系统会释放该对象。您不必通过调用free
来强制取消分配对象。你只是摆脱了对它的所有引用。
您需要立即阅读Cocoa Core Competencies: Object Ownership。这句话特别针对你的问题:
如果没有对象的剩余强引用,则对象将被释放。