Я продолжаю получать Segmentation Fault (core dumped)
ошибки времени выполнения, и я не могу понять, почему.C Сбой сегментации (сбрасываемый сердечник) Связанный список
Мой код:
struct Node
{
void *next;
void *val;
};
typedef struct Node* NodePtr;
struct List
{
NodePtr head;
};
typedef struct List* ListPtr;
ListPtr create()
{
ListPtr ptr = malloc(sizeof(struct List));
return ptr;
}
int insert(ListPtr list, void *obj)
{
NodePtr newObj = malloc(sizeof(struct Node));
//Cast next as a self referencing Node
newObj->next = (NodePtr) newObj->next;
//Point to beginning of list
NodePtr current = list->head;
if(list->head == NULL)
{
newObj->val = obj;
list->head->next = newObj;
newObj->next = NULL;
return 1;
}
return 0;
}
int main(int argc, char *argv[])
{
int x = 2;
int *p = &x;
ListPtr thing = create();
insert(thing, p);
return 0;
}
Ошибка здесь: list->head->next = newObj
после некоторой отладки. Я думал, что мне пришлось выделить память для списка -> head -> next, но когда я добавил код для этого, он все равно дал мне ту же ошибку. Исправляю ли я неправильно или не правильно распределяю память? Любая помощь будет оценена, спасибо!
'list-> head-> следующая = newObj;' если (list-> голова == NULL) ==> 'нуль- > next = newObj; '. также 'list-> head' не инициализируется. – BLUEPIXY
Pro-tip: в ваш первый год (ы) C, не используйте typedef. Это только смутило бы вас. – wildplasser
Спасибо, я забыл инициализировать голову. Добавил это, но все равно не повезло. Я также должен использовать typedef, у него есть typedef. Мой код, который я написал, не является частью этого, но он похож. –