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

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_对象的指针,并使用memcpy
将marker的内容复制到marker2中,一切正常。只有当我
试图将标记的内容复制到出现错误的外部对象
发生。
有人能指出我做错了什么吗?

最佳答案

不幸的是,发布的代码是正确的。
我说“不幸”是因为这意味着问题出在你程序的其他地方。我建议使用其他工具,如Mudflap和Valgrind。
如果使用GCC,请使用-fmudflap编译。这需要安装mudflap库。
和瓦尔格林一起跑。
这些工具在目的上确实有些重叠,但有些错误只有两个工具中的一个会发现。

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

10-12 16:11