我这里有一个函数可以销毁作用于排序列表的迭代器。
void SortedListDestroyTheIterator (SortedListIteratorPtr iter)
{
Node pt = NULL;
Node prev = NULL;
SortedListIteratorPtr walk;
walk = malloc(sizeof(struct SortedListIterator)+1);
SortedListPtr li = iter->list;
for(pt = li->start; pt!=NULL; pt = pt->next) //problem line of code
{
walk = pt->info;
//delete
if(walk==iter){
if(prev==NULL){
li->start = li->start->next;
}
else
{
prev->next = pt->next;
}
}
prev = pt;
}
free(iter);
}
我发现这个赋值语句发生了段错误:pt = li->start
。现在这行代码正在创建一个指向列表起始节点的节点。如果我输入 li->start
它可以工作,但是一旦我添加分配 pt=li->start
就会出现段错误。我不明白为什么或如何解决这个问题。
最佳答案
Node 是节点还是指向节点的指针?如果Node是一个结构体,那么代码应该是:
Node * pt = NULL;
Node * prev = NULL;
尽管此修复有效,但我不明白为什么编译器没有产生错误或警告。
示例代码未显示 Node、SortedListPtr、SortedListIterator 或 SortedListIteratorPtr 的定义方式。
我没有检查是否还有其他问题。
关于c - C 中排序列表中指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877057/