Member 12700491 Ответов: 2

Что не так в моем коде создания связанного списка?


#include <stdio.h>
#include <stdlib.h>
struct node
{
    int n;
    struct node *next;
};
int main()
{
    int n;
    struct node *head, *newnode;
    newnode = (struct node *)(malloc(sizeof(struct node)));
    head=NULL;
    printf("blah");
    while(1);
    {
        printf("enter the character:(1/0)\n");
        scanf("%d",&newnode->n);
        if(n==0)
        {
            return 0; 
        }
            else
            {
                newnode=head;
                newnode->next=NULL;
            }
     }
     return 0;

}


Что я уже пробовал:

Я пытался создать единый связанный список.

2 Ответов

Рейтинг:
12

Jochen Arndt

Вы назначаете NULL к newnode и доступ к нему тогда:

head=NULL;
// head is not changed anymore later

// Here newnode is set to NULL because head is NULL
newnode=head;
// Here you get an access violation
newnode->next=NULL;


Вы должны прочитать учебник о связанных списках, например Связанные списки - изучаю С ++ - бесплатный интерактивный с учебник[^].


Maciej Los

А 5!
Ястребиный глаз ;)

CPallini

5.

Рейтинг:
0

Patrice T

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

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

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