我正在尝试通过使用以下代码将名为“Holder”的结构放入堆中,但是在尝试使用memcpy时出现分段错误:
Holder hold;
Holder *heapHold = memcpy(heapHold, &hold, sizeof(Holder));
为什么我会出现段错误?
最佳答案
Holder hold;
这将
hold
声明为Holder
类型的变量。 hold
未初始化。Holder *heapHold = memcpy(heapHold, &hold, sizeof(Holder));
memcpy(dest, source, size)
将size
字节从source
复制到dest
。假定dest
已正确分配。由于您没有为其分配内存,因此会出现段错误。您需要分配内存:
Holder *heapHold = malloc(sizeof *heapHold);
if (heapHold == NULL) {
/* failed to allocate, handle error here */
} else {
/* OK to copy. Make sure you initialize 'hold' to something valid */
memcpy(heapHold, &hold, sizeof *heapHold);
}
同样,
memcpy()
返回第一个参数。将返回值分配给heapHold
就像说a = a;
一样,即它什么也没做。在大多数实际情况下,memcpy()
的返回值将被忽略。关于c - 使用memcpy将结构复制到堆中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5751960/