所以我在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错误,我不知道为什么。
非常感谢任何帮助!
编辑:
我已经包含了一些其他代码,这些代码被称为可能是东西回归的地方,尽管seg错误位于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;
}
然后在main中调用它:
list *l = newList(sizeof(int));
insertBefore(l, (void *)3);
...
答案 0 :(得分:1)
您的代码尝试memcpy(new->item, 3, sizeof(int))
您正在获得分段错误,因为3不是可解除引用的地址。
相反,你应该这样做:
int x = 3;
insertBefore(l, &x);