在目标C中取消分配链表?

时间:2015-12-04 03:25:06

标签: objective-c

所以我创建了一个链表并打印出结果,但是当我尝试取消分配列表时它不起作用。

我正是这样做的:

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

1 个答案:

答案 0 :(得分:0)

Objective-C中的每个对象都有一个“保留计数”,当保留计数变为零时,系统会释放该对象。您不必通过调用free来强制取消分配对象。你只是摆脱了对它的所有引用。

您需要立即阅读Cocoa Core Competencies: Object Ownership。这句话特别针对你的问题:

  

如果没有对象的剩余强引用,则对象将被释放。