Бесконечный цикл при попытке работы со связанными списками - PullRequest
0 голосов
/ 10 января 2019

Я только начинаю с C, и я попытался написать простой связанный список, который добавляет целые числа, пока число не станет 0, однако я продолжаю получать бесконечный цикл с последним числом, которое я поместил в список. Я знаю, что это, вероятно, потому, что последний элемент не указывает на ноль, но я не могу исправить это.

Спасибо: -)

#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 голосов
/ 10 января 2019

Я думаю, что прежде чем пытаться понять связанный список, вы должны поработать над пониманием указателей и динамического распределения, так как связанные списки используют эти два понятия.

Связанный список - это список областей памяти, которые вы должны выделить (и динамически), я не знаю, что здесь делает ваша программа, но он не должен быть стабильным в системе с какой-либо защитой памяти.

"aux" - указатель, который указывает ... где-то. Мы не знаем где, но, вероятно, не там, где нужно.

В C нет волшебства, как в языках более высокого уровня (python и т. Д.). Вы должны создать свой связанный список самостоятельно

0 голосов
/ 10 января 2019

Вы не выделяете память, поэтому aux ни на что не указывает. Если вы хотя бы инициализировали его, nodo *aux = nullptr;, вам, по крайней мере, повезет увидеть сегфоут. Кроме того, вы никогда не выделяете другой aux или l, поэтому совершенно очевидно, что строка l=aux; ..., aux->sig=l просто делает aux циклический список длины 1, указывающий на себя.

...