尝试使用链表时出现无限循环

时间:2019-01-09 21:03:40

标签: c pointers linked-list infinite-loop

我只是从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;
    }
}

2 个答案:

答案 0 :(得分:0)

您没有分配任何内存,因此aux没有指向任何内容。如果至少初始化了nodo *aux = nullptr;,则至少有幸看到了段错误。除此之外,您再也不会分配另一个auxl,因此很明显,行l=aux; ..., aux->sig=l仅使aux成为一个长度为1的循环列表,指向自身。 / p>

答案 1 :(得分:0)

我认为在尝试理解链表之前,您应该先了解指针和动态分配,因为链表使用了这两个概念。

链表是必须分配(动态地)分配的内存区域的列表,我不知道您的程序在这里做什么,但是在具有任何类型的内存保护的系统上,它应该不稳定。 / p>

“ aux”是一个指向点的指针。我们不知道在哪里,但可能不知道在哪里。

在C语言中,没有像高级语言(python等)这样的神奇东西。您必须自己构建链接列表