我试图通过使用以下代码将名为"Holder"的结构放入堆中,但是当我尝试使用memcpy时出现分段错误:
Holder hold;
Holder *heapHold = memcpy(heapHold, &hold, sizeof(Holder));
Run Code Online (Sandbox Code Playgroud)
为什么我会出现段错误?
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从字节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);
}
Run Code Online (Sandbox Code Playgroud)
此外,memcpy()返回第一个参数.分配返回值heapHold就像说a = a;,即它没有做任何事情.对于大多数实际情况,memcpy()忽略返回值.