gpt4 book ai didi

c - 为什么这个链表会出现段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:38 25 4
gpt4 key购买 nike

如果在 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;
}

最佳答案

您忘记设置newNodepreviousnext 指针。 insertAfter(更改行)中还有另一个错误。

void insertBefore(list *l, void *p){
node* newNode = malloc(sizeof(node) + l->SizeOfData);
memcpy(newNode->item, p, l->SizeofData);
newNode->previous = l->current->previous; // Added line
newNode->next = l->current; // Added line
l->current->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);
newNode->previous = l->current; // Added line
newNode->next = l->current->next; // Added line
l->current->next->previous = newNode;
l->current->next = newNode; // Changed line
l->current = newNode;
}

关于c - 为什么这个链表会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41240312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com