我正在尝试通过使用以下代码将名为“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/

10-12 13:50