创建列表时出现分段错误

Posted

技术标签:

【中文标题】创建列表时出现分段错误【英文标题】:Segmentation fault while creating a list 【发布时间】:2021-12-10 04:41:04 【问题描述】:

我正在创建一个新的结构列表,我将在其中保存有关一系列汽车的一些信息。我编译代码没有问题,但是一旦我运行它就会出现分段错误。

这是问题所在的代码:

car* insertNode(car *head)
    car *temp;
    car *prec;
    temp=(car *)malloc(sizeof(car));
    
    if(temp!=NULL)
        temp->next=NULL;
        if(head==NULL)
            head=temp;
        else//Raggiungi il termine della lista
            for(prec=head;prec->next!=NULL;prec=prec->next);
            prec->next=temp;
        
        getData(temp);
        printf("Inserire l'anno di immatricolazione dell'auto: ");
        scanf("%i",&temp->anno);
    
    else
        printf("Memoria esaurita!\n");
    
    return head;

我尝试对此进行调试,发现问题出在具有 for 循环的代码行中。有什么问题?我只使用 库,我不能使用其他库来完成这项工作,但我不明白有什么问题。

【问题讨论】:

我们需要足够的代码来复制问题。您向我们展示的代码是 victim,而错误在肇事者中,您没有向我们展示。 @Il_Kevo 提供一个演示问题的最小完整程序。 【参考方案1】:

通过阅读您的代码,它似乎是正确的;如果它产生分段错误,我认为唯一的方法是因为“head”可能没有正确初始化为null。

此外,调试空循环可能很困难。考虑(仅出于调试目的)在循环内添加一些虚拟语句(即递增计数器)。

您还应该使用内存视图(如果可能在您的调试器中)来检查指针指向的内存位置的内容。

祝你好运!

【讨论】:

这应该是一条评论。 我同意,弗拉德,但我目前的声誉不允许我评论第三方帖子,只能评论自己的帖子。所以,这是我发现给这个用户一个提示的唯一方法。请让我知道是否可以使用其他方法,我不太习惯论坛中的所有功能和政策。

以上是关于创建列表时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中创建大型数组时出现分段错误

尝试显示窗口时出现 Qt 错误分段错误

创建链表时出现神秘的分段错误(添加功能)

分段错误:在 C++ 中弹出向量时出现 11

访问共享内存时出现分段错误

从堆栈读取时出现分段错误