c-代码中出现奇怪的分段错误



我真的很绝望,我不知道为什么这段代码会出现分段错误。这应该将一个元素放在链接的末尾**n从不为空,但*n可能是

int insertaFinal(Nodo **n, int dato){
    if (!*n){
        insertaInicio(n,dato);
        return 1;
    }
    Nodo* temp = *n;
    while (temp->sig)
        temp = temp->sig;
    temp -> sig = (Nodo*) malloc(sizeof(Nodo));
    temp = temp->sig;
    temp->dato = dato;
    return 1;
}

这并没有什么"奇怪"的。此处:

while (temp->sig)
    temp = temp->sig;

您似乎想要循环,直到temp->sig变成NULL,但当您创建新节点时,您从未将该成员设置为NULL,因此很明显,您的循环将进入未分配的内存。你需要做的是:

temp->sig = malloc(sizeof *temp->sig);
if ( !temp->sig ) {
    perror("Couldn't allocate memory for node");
    exit(EXIT_FAILURE);
}
temp = temp->sig;
temp->dato = dato;
temp->sig = NULL;    //  <---- Add this line

如果在insertaInicio()中也没有将sig设置为NULL,那么您应该编写一个构造函数来避免重复,并在这两个地方都使用它,甚至更好。

相关内容

  • 没有找到相关文章

最新更新