1
Следующий код приводит к ошибке сегментации, если insertBefore вызывается после insertAfter или если insertAfter вызывается несколько раз.Почему этот связанный список Seg Fault?
void insertBefore(list *l, void *p){
node* newNode = malloc(sizeof(node) + l->SizeOfData);
memcpy(newNode->item, p, l->SizeofData);
l->curent->previous->next = newNode;
l->current->previous = newNode;
}
void insertAfter(list *l, void *p){
node* newNode = malloc(sizeof(node) + l->SizeOfData);
memcpy(newNode->item, p, l->SizeofData);
l->curent->next->previous = newNode;
l->current->previous->next = newNode;
l->current = newNode;
}
списки используются являются:
struct node {
struct node *previous;
struct node *next;
char item[];
};
typedef struct node node;
struct list {
node *first;
node *current;
node *last;
int SizeOfData;
};
list *newList(int b) {
list *list = malloc(sizeof(list));
node *sentnode = malloc(sizeof(node));
sentnode->previous = sentnode;
sentnode->next = sentnode;
list->first = sentnode;
list->current = sentnode;
list->last = sentnode;
list->SizeOfData = b;
return list;
}
Где указывает отладчик, вызывающий ошибку seg? –
Я использую компилятор C, поэтому он не указывает, где. Сожалею. –
Какие ОС вы используете, и можете ли вы предоставить минимальный рабочий пример, который показывает проблему? Неправильный отладчик mans должен просто вставлять выражения 'printf' между строками, пока не увидите, какой из них не печатается –