c - 使用 memcpy 将结构复制到堆中

标签 c struct memcpy

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

相关文章:

c - 线程安全队列的问题表现为 IDE 控制台中没有输出

c - 如何获取 char 数组中每个元素的大小

有人可以解释一下这段涉及 free() 的代码实际上做了什么吗

c++ - 无法执行嵌套函数,有什么办法解决这个问题?

c - 指向指针数组的指针指向意外的地址

动态的 C 函数和结构

从二维动态字符数组复制到c中的另一个二维动态数组

struct - 如何为 defstruct 的递归 "slot-value"编写宏?

c++ - float 到 4 uint8_t 并显示

c - 错误 :free(): invalid next size (fast)