我正在为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;
答案 0 :(得分:4)
一位聪明人曾经说过,“我宁愿骑马朝着它的方向前进。”
当你可以使用一个非常好的NSMutableArray
类时,不要滚动你自己的结构。数组的线性迭代既便宜又简单,并且该类带有自己的内存管理挂钩,您只需使用它们即可。
我对C和C ++开发人员的看法很多,他们会转向Objective-C。我的板块上的下一个项目是取消一个非常高级的C ++家伙在过去六个月里度过的项目。看一下代码,很明显他几乎把所有的时间都花在与框架争论上。此时他几乎构建了他自己的自己的框架。
答案 1 :(得分:2)
您是否明确初始化NULL
或nil
旁边?
如果没有,它可能已经设置为某个非零值,因此while (pointTrain)
仍将评估为真。