我试图从双端队列复制错误对象的内容,但是当 我检查了复制的内容,它是不正确的。
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。
- 如果使用 GCC,请使用
-fmudflap
进行编译。这需要安装 mudflap 库。 - 使用 Valgrind 运行。
这两种工具在目的上确实有些重叠,但有些错误只有两种工具中的一种可以捕获。
关于在 C 中正确使用 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16532799/