Связанные списки рушатся после принятия первого номера - PullRequest
0 голосов
/ 10 января 2019
struct node
{
int value;
struct node* nextptr;
};

typedef struct node Node;
typedef struct node* Nodeptr;

Nodeptr* currentptr = NULL;
Nodeptr* previousptr = NULL;
Nodeptr* startptr =NULL;

void insertnode(int data)
{

Nodeptr newptr;
newptr = (Nodeptr)malloc(sizeof(Node));
newptr->value = data;
newptr-> nextptr = NULL;

(*currentptr) = (Nodeptr)malloc(sizeof(Node));
(*previousptr) = (Nodeptr)malloc(sizeof(Node));
(*startptr) = (Nodeptr)malloc(sizeof(Node));

if((*currentptr) == NULL)
  {
   *currentptr = newptr;
   *startptr = newptr;
  }

else
{
  (*currentptr)->nextptr = newptr;
  *previousptr = *currentptr;
  (*currentptr) = newptr;
}
 }

Это код, который я использую для создания связанных списков.

 for(int i=0;i<n;i++)
 {
    int num;
    scanf("%d",&num);
    insertnode(num);
  }

Используется для получения ввода от пользователя с помощью цикла for. int n уже объявлен и инициализирован. Моя программа падает после получения первого ввода. Я думал о проблемах выделения памяти, но, похоже, это не решает проблему. Также я новичок в программировании и программировании, поэтому прошу прощения за любые крошечные ошибки!

1 Ответ

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

из вашего кода:

(*currentptr) = (Nodeptr)malloc(sizeof(Node));
...

if((*currentptr) == NULL)

Предположим, у вас есть память для выполнения malloc, и присвоение действительно, тест после ложен и бесполезен

В вашем коде глобально возникает путаница между получением / установкой указателя и получением / установкой указанного значения

Моя программа падает после получения первого ввода

Что касается вашего сбоя, то это просто потому, что currentptr равен нулю, когда вы отменяете ссылку в первой строке выше

Существует множество примеров связанного списка в C на S.O. Я рекомендую вам взглянуть на них, используя search

Если у вас есть valgring , используйте его, это очень полезный инструмент и / или, конечно, используйте отладчик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...