gpt4 book ai didi

c - 将 memcpy 与 void 指针一起使用时出现段错误 - C

转载 作者:行者123 更新时间:2023-11-30 21:00:27 25 4
gpt4 key购买 nike

所以我一直在用 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);

...

空指针p是一些数据,itemSize是该数据的字节数。当然,这不是整个 insertBefore 代码,但其中的逻辑应该是合理的,因为我已经使列表使用 int 作为项目类型。

当我调用此方法时,我收到 Segmentation failure: 11 错误,但我不确定原因。

任何帮助将不胜感激!

编辑:

我已经包含了一些其他称为 as 的代码,这些代码可能是东西要返回的地方,尽管段错误位于 insertBefore 中的 memcpy

list *newList(int b){

list *l = (list*)malloc(sizeof(list));
l->itemSize = b;
l->first = NULL;
l->current = NULL;
l->last = NULL;

return l;
}

然后在 main 中调用它:

list *l = newList(sizeof(int));
insertBefore(l, (void *)3);
...

最佳答案

您的代码尝试memcpy(new->item, 3, sizeof(int))您遇到段错误,因为 3 不是可取消引用的地址。

相反,你应该这样做:

int x = 3;
insertBefore(l, &x);

关于c - 将 memcpy 与 void 指针一起使用时出现段错误 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41208880/

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