尝试使用链表时出现无限循环
Infinite loop when trying to work with linked lists
我刚从 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;
}
}
您没有分配任何内存,所以 aux
没有指向任何东西。如果你至少初始化它,nodo *aux = nullptr;
,你至少会幸运地看到一个段错误。除此之外,你永远不会分配另一个 aux
或 l
,所以很明显 l=aux; ..., aux->sig=l
行只是使 aux
成为一个长度为 1 的循环列表,指向它自己。
我认为在尝试理解链表之前,您应该先了解指针和动态分配,因为链表使用这两个概念。
链表是你必须分配(和动态)的内存区域列表,我不知道你的程序在这里做什么,但它在有任何内存保护的系统上应该不稳定.
"aux" 是一个指向...某处的指针。我们不知道在哪里,但可能不应该在哪里。
在 C 中,没有像高级语言(python 等)那样神奇的东西。你必须自己建立链表
我刚从 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;
}
}
您没有分配任何内存,所以 aux
没有指向任何东西。如果你至少初始化它,nodo *aux = nullptr;
,你至少会幸运地看到一个段错误。除此之外,你永远不会分配另一个 aux
或 l
,所以很明显 l=aux; ..., aux->sig=l
行只是使 aux
成为一个长度为 1 的循环列表,指向它自己。
我认为在尝试理解链表之前,您应该先了解指针和动态分配,因为链表使用这两个概念。
链表是你必须分配(和动态)的内存区域列表,我不知道你的程序在这里做什么,但它在有任何内存保护的系统上应该不稳定.
"aux" 是一个指向...某处的指针。我们不知道在哪里,但可能不应该在哪里。
在 C 中,没有像高级语言(python 等)那样神奇的东西。你必须自己建立链表