Си проблема с разыменованием

Пишу реализацию списка. Сказали - переделать в двунаправленный.

void pushToStart(struct TreeStruct **start, char data) {
    struct TreeStruct *tmp = malloc(sizeof(struct TreeStruct));
    
    //(*start)->prev = tmp;
    
    tmp->data = data;
    tmp->next = (*start);
    tmp->prev = NULL;
    (*start) = tmp;
}

Закоментированная строка - то, что по моему мнению необходимо для реализации. Однако если строку раскомментить, вылезет segmentation error, если же попробовать (**start).prev = tmp; , то будет такая же ошибка. Во всех остальных случаях ошибка несоответстия типов

В качестве start передается struct TreeStruct* tree; pushToStart(&tree, NULL)

Как быть?


Ответы (1 шт):

Автор решения: Harry

Как я понимаю,

struct TreeStruct* tree; 
pushToStart(&tree, NULL);

Итак, что мы имеем? Имеем

(*start)->prev = tmp;

которое по сути не что иное как

tree->prev = tmp;

т.е. неинициализированный указатель tree, указывающий в фиг куда, и это фиг куда разыменовывается и туда - уже в фиг-фиг куда :) - пишется значение tmp...

Так что ваш tree должен быть чем-то реальным, указывать на реально выделенную память. Чем именно - зависит от вашей задачи, тут вам виднее...

→ Ссылка