在 C 中正确使用 memcpy

标签 c memcpy

我试图从双端队列复制错误对象的内容,但是当 我检查了复制的内容,它是不正确的。

typedef struct ER_OBJECT
{
    uint8 error_type;

    union
    {
        uint32 number;
        char *message;
    } error;

} ER_OBJECT;

void er_copy(DE_LIST *deque, ER_OBJECT *object)
{
    ER_OBJECT *marker;

    marker = er_get_first_object(deque);

    memcpy(object, marker, sizeof(*marker));
}

直到并包括函数 er_get_first_object 的一切都作为 预期的,即我可以检查标记的内容并且它是正确的。这让我相信问题出在 memcpy 上。

如果我创建第二个指向名为 marker2 的 ER_OBJECT 的指针,并使用 memcpy 将 marker 的内容复制到 marker2 中,一切正常。只有当我 尝试将标记的内容复制到错误的外部对象 发生。

谁能指出我做错了什么?

最佳答案

不幸的是,发布的代码是正确的。

我说“不幸”是因为这意味着问题出在您程序的其他地方。我建议使用其他工具,例如 Mudflap 和 Valgrind。

  1. 如果使用 GCC,请使用 -fmudflap 进行编译。这需要安装 mudflap 库。
  2. 使用 Valgrind 运行。

这两种工具在目的上确实有些重叠,但有些错误只有两种工具中的一种可以捕获。

关于在 C 中正确使用 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532799/

相关文章:

c++ - 读取大型 txt 文件时在结构内动态分配 vector

c - 哪个更有效,循环或只是定期添加

C 浅拷贝混淆

有人可以向我解释指向指针的指针吗

将字节复制到结构会给出错误的值

c++ - 如果我用memcpy函数复制一个数组,可能会有什么后果: bottlenecks and perfomance changes?

c - 使用 makefile 获取编译错误

c - 以下两个声明有什么不同吗

c++ - 我可以使用 memcpy 写入多个相邻的标准布局子对象吗?

用 memcpy 复制两个 char* 到 **buff - C 语言