我非常绝望,我不知道为什么这段代码会出现分段错误。这应该在链接的末尾放置一个元素。 **它永远不会为空,但* 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;
}
答案 0 :(得分: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
如果您未在sig
中将NULL
设置为insertaInicio()
,那么您应该甚至更好地编写构造函数以避免重复并在两者中使用它地方。