Ошибка при нажатии глобального связанного списка * иногда (случайно) * - PullRequest
0 голосов
/ 11 мая 2019

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

typedef struct person{
    char name[20];
    char surname[20];
    char musical_Work[20];
    int age;
    struct person *next;
}*top;

top head=NULL;  /* GLOBAL */

void addNode(   /* datas */    ){  
    top new_node=(top)malloc(sizeof(top));

    /* copying datas */

    new_node->next=head;
    head=new_node;  
}

1 Ответ

2 голосов
/ 11 мая 2019

Код top new_node=(top)malloc(sizeof(top)); выделяет достаточно места для top, который является указателем на struct person. Тем не менее, пространство будет использоваться для хранения struct person, и поэтому оно должно выделять достаточно места для struct person. Поэтому правильный код для этого:

 top new_node=(top)malloc(sizeof(struct person));

Дополнительно:

  • Использование sizeof *new_node автоматически выделяет достаточно места для того, на что указывает new_node, даже если тип new_node изменяется при редактировании кода.
  • В C нет необходимости использовать тип malloc. Этот код может быть top new_node = malloc(sizeof *new_node);.
  • Попробуйте использовать другое имя для указателя на struct person вместо top. Это не всегда вершина стека.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...