Итак, я создал двусвязный общий список в C. Я успешно создал его с помощью ints в качестве хранимых данных, но теперь мне нужно сделать его общим.Сегментация Неисправность при использовании memcpy с указателями void - C
Я создал тип списка и узел переменной:
struct node{
struct node *prev;
struct node *next;
void *item;
};
struct list{
struct node *first;
struct node *current;
struct node *last;
int itemSize;
};
меня возникли проблемы с установкой значения в элемент в узле. У меня есть следующий код для вставки newNode перед текущим указателем.
void insertBefore(list *l, void *p){
struct node *new = (struct node*) malloc(sizeof(struct node));
new->item = malloc(l->itemSize);
memcpy(new->item,p,l->itemSize);
...
Указатель Void p - это некоторые данные, а itemSize - количество байтов указанных данных. Конечно, это не весь код insertBefore, но логика в этом должна звучать, поскольку я создал список с int как тип элемента.
Когда я называю это, я получаю ошибку сегментации: 11 ошибок, и я не уверен, почему.
Любая помощь будет очень признательна!
редактировать:
Я включил некоторые из другого кода называется, поскольку это может быть там, где материал собирается обратно, хотя вина сегментный находится на memcpy
в insertBefore
list *newList(int b){
list *l = (list*)malloc(sizeof(list));
l->itemSize = b;
l->first = NULL;
l->current = NULL;
l->last = NULL;
return l;
}
, а затем этот называется в основном:
list *l = newList(sizeof(int));
insertBefore(l, (void *)3);
...
Почему просто не позволить пользователю список вашего беспокойства о выделения и освобождения их данные? Охлаждение их использованием 'malloc' для хранения данных строго ограничивает. Просто требуйте действительный указатель данных при вставке в список, а также обратный вызов для освобождения данных при создании объекта списка. – StoryTeller
Я пытаюсь создать библиотечный модуль, чтобы его можно было повторно использовать позже, когда пользователь не видит узлы или что-то еще, и только перемещается вперед и назад между данными по мере необходимости, сохраняя для них как можно более простой. –
(Также я не создал идею для этого, мне только что сказали, что мне нужно это сделать, я полностью согласен с вами!) –