Си проблема с разыменованием
Пишу реализацию списка. Сказали - переделать в двунаправленный.
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 шт):
Как я понимаю,
struct TreeStruct* tree;
pushToStart(&tree, NULL);
Итак, что мы имеем? Имеем
(*start)->prev = tmp;
которое по сути не что иное как
tree->prev = tmp;
т.е. неинициализированный указатель tree, указывающий в фиг куда, и это фиг куда разыменовывается и туда - уже в фиг-фиг куда :) - пишется значение tmp...
Так что ваш tree должен быть чем-то реальным, указывать на реально выделенную память. Чем именно - зависит от вашей задачи, тут вам виднее...