【发布时间】:2016-12-20 10:37:30
【问题描述】:
如果在 insertAfter 之后调用 insertBefore 或多次调用 insertAfter,则以下代码会导致分段错误。
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语句,直到你可以看到哪个没有被打印出来 -
开启警告!
list *list = malloc(sizeof(list));:错误,list未声明! -
list *list = malloc(sizeof(list));-->struct list *list = malloc(sizeof(struct list));
标签: c pointers linked-list