使用memcpy将结构复制到堆中

hut*_*123 2 c struct memcpy

我试图通过使用以下代码将名为"Holder"的结构放入堆中,但是当我尝试使用memcpy时出现分段错误:

Holder hold;
Holder *heapHold = memcpy(heapHold, &hold, sizeof(Holder));
Run Code Online (Sandbox Code Playgroud)

为什么我会出现段错误?

Alo*_*hal 7

Holder hold;
Run Code Online (Sandbox Code Playgroud)

这声明hold为类型的变量Holder. hold没有初始化.

Holder *heapHold = memcpy(heapHold, &hold, sizeof(Holder));
Run Code Online (Sandbox Code Playgroud)

memcpy(dest, source, size)副本size从字节sourcedest.它假设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);
}
Run Code Online (Sandbox Code Playgroud)

此外,memcpy()返回第一个参数.分配返回值heapHold就像说a = a;,即它没有做任何事情.对于大多数实际情况,memcpy()忽略返回值.

  • 包含指向(内部)指针的结构,或包含应该深度复制的数据的指针的结构. (2认同)