代码中的奇怪分段错误

时间:2014-10-03 04:01:47

标签: c linked-list segmentation-fault

我非常绝望,我不知道为什么这段代码会出现分段错误。这应该在链接的末尾放置一个元素。 **它永远不会为空,但* 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;
}

1 个答案:

答案 0 :(得分:1)

没有什么"奇怪"对这个。这里:

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

您似乎想要循环直到temp->sigNULL,但是当您创建新节点时,您从未将此成员设置为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

如果您未在sig中将NULL设置为insertaInicio(),那么您应该甚至更好地编写构造函数以避免重复并在两者中使用它地方。

相关问题