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

标签 c pointers segmentation-fault malloc memcpy

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

相关文章:

c++ - 尾递归如何真正帮助传统递归?

c - 为什么在 C 中不能将二维数组转换为二维指针?

c++ - Windows 上不会发生的 Linux 上的隐形 SIGSEGV?

matlab - Mex 函数在完成时崩溃

c - C语言,算法在LINUX上运行良好,但在Windows 7上运行不佳?

c - 头文件中的函数定义(c 使用 gcc)

python - 用并行化的 C 程序扩展 Python(在 OMP 下)

c - 使用两个函数生成随机数数组

c - 通过函数操作变长二维数组

c - 段错误: 11 in C