【发布时间】:2011-07-30 02:38:51
【问题描述】:
所以有一个问题我连续两个晚上都在头疼:
(tuple1 和 tuple2 是传递给这个函数的 void 指针)
char *data;
data = (char*) calloc (76, 1);
memcpy(data, tuple1, 32);
memcpy(data+32, tuple2, 44);
想法是分配内存等于tuple1和tuple2的大小之和(tuple1是32字节,tuple2是44)然后复制tuple1的32字节并粘贴它们在数据地址,然后复制tuple2的44个字节并将它们粘贴到数据地址后32个字节。
问题是,如果我只复制tuple1 或只复制tuple2,它确实被复制到了它应该在的地方(我打印的数据太长了,无法放在这里),但是当我做这两个内存时复制第一个 memcpy() 可以正常工作,但第二个不行。
谁能帮我解决这个严重的问题?
【问题讨论】:
-
您所描述的内容本身应该有效。但是,您未显示的代码可能导致其无法工作的原因有很多。请发布一个完整的程序,在编译和运行时显示问题;还要描述它的作用以及您期望它做什么。
-
证明它。显示一个完整的程序,显示您描述的行为(当一个或另一个 memcpy 行被注释掉时)。希望在将您的真实代码缩减为该演示的过程中,您会注意到它何时突然重新开始工作,这会告诉您出了什么问题。
-
你怎么知道第二个副本不起作用?你有什么证据?
-
这是什么平台?在 x86 以外的其他东西上,对齐问题肯定会发挥作用。
-
我敢打赌打印有错误的数据的代码。如果 tuple1 和 tuple2 都是指针,那么你的代码应该复制内存。