无法在Objective-C iPhone开发中释放链表

时间:2011-05-17 11:22:14

标签: iphone memory-management linked-list

我正在为iPhone编写一个应用程序,它使用链接列表来跟踪一组点。我已经在其他C程序中成功地使用了链表一次又一次,但我从来没有在iPhone上使用链表,而且我的'freeList'功能正在崩溃。

pointNode * temp;

pointTrain = lPoints->next;
while (pointTrain) {
    temp = pointTrain->next;
    free(pointTrain);
    pointTrain = temp;
}

这就是我释放列表的方式,'lPoints'是头,并且总是在运行时分配。此代码在添加任何更多节点之前执行,但即使“pointTrain”为NULL,它似乎仍然执行,应该使它跳过while循环。不幸的是,循环仍然执行,程序在free(pointTrain)

崩溃

有什么我只是没有看到的吗?

点在循环中添加如此:

pointTrain->x = onPx / trueWidth;
pointTrain->y = onPx % trueWidth;
pointTrain->next = (pointNode*)malloc(sizeof(pointNode));
pointTrain = pointTrain->next;

2 个答案:

答案 0 :(得分:4)

一位聪明人曾经说过,“我宁愿骑马朝着它的方向前进。”

当你可以使用一个非常好的NSMutableArray类时,不要滚动你自己的结构。数组的线性迭代既便宜又简单,并且该类带有自己的内存管理挂钩,您只需使用它们即可。

我对C和C ++开发人员的看法很多,他们会转向Objective-C。我的板块上的下一个项目是取消一个非常高级的C ++家伙在过去六个月里度过的项目。看一下代码,很明显他几乎把所有的时间都花在与框架争论上。此时他几乎构建了他自己的自己的框架。

答案 1 :(得分:2)

您是否明确初始化NULLnil旁边?

如果没有,它可能已经设置为某个非零值,因此while (pointTrain)仍将评估为真。