Создание проблемы двойного связанного списка - PullRequest
0 голосов
/ 06 апреля 2020

Моя проблема в том, что когда я пытаюсь распечатать этот список из 10 элементов, в Eclipse ничего не происходит. Я читал, что это из-за исключения нулевого указателя где-то, но я не могу найти его. Заранее спасибо за помощь!

DLinkedList* createList()
{
    int i=0;
    DLinkedList* head = NULL;
    DLinkedList* temp = NULL;
    DLinkedList* temp2 = NULL;

    temp = (DLinkedList*)malloc(sizeof(DLinkedList));
    temp2 = (DLinkedList*)malloc(sizeof(DLinkedList));
    temp->sensorData = readSensor()->sensorData;
    temp->next = NULL;

    for(i=0; i<10; i++)
    {
        if(head == NULL)
        {
            head = temp;
            head->prev = NULL;
            printf("1 \t");
        }
        else
        {
            temp2 = head;
            while(temp2->next != NULL)
            {
                temp2 = temp2->next;
            }
            temp2->next = temp;
            temp->prev = temp2;
            printf("2 \t");
        }
    }

    return head;
}

1 Ответ

0 голосов
/ 06 апреля 2020

На протяжении l oop, temp указывает на один и тот же кусок памяти, который представляет один узел. Вы постоянно устанавливаете указатели next и prev этого узла так, чтобы они указывали на себя.

Мне кажется, что это приведет к бесконечному l oop, пока вы пытаетесь построить список. После второй итерации обход списка никогда не закончится, так как каждый раз, когда вы переходите к следующему узлу, вы действительно смотрите на один и тот же узел.

Возможно, вы захотите повторно инициализировать temp с новым mallo c вызовите каждую итерацию l oop, чтобы вы на самом деле получили различные узлы.

(Кроме того, нет необходимости инициализировать temp2 с помощью mallo c. Вы никогда ничего не делаете с этим память. Первое использование temp2 - присвоить ему значение head, которое указывает куда-то еще.)

...