在C中正确使用memcpy

时间:2013-05-13 23:32:35

标签: 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。

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

有人会如此善意地指出我做错了吗?

1 个答案:

答案 0 :(得分:1)

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

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

  1. 如果使用GCC,请使用-fmudflap进行编译。这需要安装mudflap库。
  2. 与Valgrind一起跑。
  3. 这些工具在某种程度上有意重叠,但是有一些错误,只有两个工具中的一个会捕获。