我只是从C开始,我试图编写一个简单的链表,该链表添加整数直到数字为0,但是我不断加一个无限循环,最后一个数字放在列表上。 我知道这可能是因为最后一个元素没有指向null,但是我似乎无法修复它。
谢谢:-)
#include <stdio.h>
#include <stdlib.h>
int main () {
struct nodo {
int num;
struct nodo *sig;
};
nodo *l;
nodo *aux;
l=nullptr;
int elem;
scanf("%d", &elem);
while (elem!=0) {
aux->num=elem;
aux->sig=l;
l=aux;
scanf("%d", &elem);
}
while (l!=nullptr) {
printf("%d", l->num);
l=l->sig;
}
}
答案 0 :(得分:0)
您没有分配任何内存,因此aux
没有指向任何内容。如果至少初始化了nodo *aux = nullptr;
,则至少有幸看到了段错误。除此之外,您再也不会分配另一个aux
或l
,因此很明显,行l=aux; ..., aux->sig=l
仅使aux
成为一个长度为1的循环列表,指向自身。 / p>
答案 1 :(得分:0)
我认为在尝试理解链表之前,您应该先了解指针和动态分配,因为链表使用了这两个概念。
链表是必须分配(动态地)分配的内存区域的列表,我不知道您的程序在这里做什么,但是在具有任何类型的内存保护的系统上,它应该不稳定。 / p>
“ aux”是一个指向点的指针。我们不知道在哪里,但可能不知道在哪里。
在C语言中,没有像高级语言(python等)这样的神奇东西。您必须自己构建链接列表