1

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

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 中,一切正常。只有当我尝试将标记的内容复制到外部对象时才会发生错误。

有人会那么好心地指出我做错了什么吗?

4

1 回答 1

1

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

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

  1. 如果使用 GCC,请使用-fmudflap. 这需要安装挡泥板库。
  2. 与 Valgrind 一起运行。

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

于 2013-05-13T23:39:51.363 回答