【发布时间】:2011-04-05 21:58:29
【问题描述】:
(tuple1 和 tuple2 是传递给这个函数的 void 指针)
char *data;
data = (char*) calloc (84, 1);
memcpy(data, tuple1, 44);
memcpy(data+44, tuple2, 40);
我为数据分配了 84 个字节。我正在做第一个内存复制 memcpy(data, tuple1, 44);它将 tuple1 的地址中的 44 个字节复制到数据的地址,当我尝试读取数据时,结果发现它已将 tuple1 的字节复制到数据的前 44 个字节上,然后再次复制了 tuple1 的 44 个字节直到它填满了分配给数据的 84 个字节。
当我进行第二次内存复制时,我尝试将 tuple2 的 40 个字节粘贴到数据地址之后的 44 个字节。实际上,它的作用与 tuple1 相同,甚至更多 - 它从数据地址开始粘贴,而不是从数据地址后的 44 个字节开始粘贴。
这是为什么?!我该如何预防呢?任何人都可以帮助,我很绝望。
【问题讨论】:
-
这些神奇的数字从何而来?
-
提供重现错误的完整程序(最小尺寸)。
-
或者至少提供 tuple1 和 tuple2 的声明。
-
又看起来像stackoverflow.com/questions/5554730/problem-when-copying-memory。就像今天早些时候的情况一样,人们仍然没有捷径可以神奇地调试他们看不到的代码。对不起。
-
Your code works for me 和 without leak。尝试发布一个简化的可编译版本,以展示您遇到问题的行为。