Проблемы с созданием связанного списка в цикле while. Получение ошибки времени выполнения при втором запуске в цикле

Я пишу программу, которая помещает каждую строку текста в узел в связанном списке. Я хочу создать новый узел для каждой строки в тексте. Программа аварийно завершает работу во время второго запуска цикла while. После некоторого тестирования я думаю, что это связано с функцией strncpy, но не уверен. Где я ошибаюсь?

#include <stdio.h>
#include <stdlib.h>
#define MAXBUF 50

struct node
{
    char data[MAXBUF];
    struct node *next;
};

int main(void)
{
    FILE *f;
    f = fopen("text.txt", "r");
    if (f == NULL) exit("ERROR\n");

    struct node *root = NULL;
    struct node *pointer = NULL;

    root = malloc(sizeof(struct node));
    pointer = root;

    char buf[MAXBUF];
    while(fgets(buf, MAXBUF, f) != NULL)
    {
        strncpy(pointer->data, buf, MAXBUF);
        pointer->next = malloc(sizeof(struct node));
        pointer->next = NULL;
        pointer = pointer->next;
    }
    fclose(f);
}

person StraightUpBusta    schedule 09.09.2014    source источник


Ответы (1)


pointer->next = NULL;
pointer = pointer->next;

Таким образом, в следующий раз по кругу:

while(fgets(buf, MAXBUF, f) != NULL)
    {
        strncpy(pointer->data, buf, MAXBUF);

pointer->data будет уважать NULL. Вы, вероятно, захотите проверить указатель на NULL перед strncpy и создать там узел malloc.

Обратите внимание, что вы никогда не освобождаете ни один из этих узлов.

person paulm    schedule 09.09.2014