c - C 中排序列表中指针的段错误

标签 c pointers segmentation-fault

我这里有一个函数可以销毁作用于排序列表的迭代器。

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/

相关文章:

c - C 中的指针给出负值

macos - 为什么访问D类成员在OSX上崩溃?

c - C 中的泛型函数指针

c - 在 C 中打印位置数字系统

c - NASM ORG 指令有 GCC 版本吗?

c - 指针数组作为函数参数

c++ - 可以安全地使用指向 vector 元素的指针来确定它在容器中的位置吗?

c - 双链表;新手尝试

c++ - 按位异或以 SIGSEGV 结束

c++ - 海湾合作委员会 : Specifying static/dynamic libraries to build against