复制内存时出现问题

所以我有一个问题,我连续两个晚上连续爆炸:

(tuple1和tuple2是传递给此函数的void指针)

char *data; data = (char*) calloc (76, 1); memcpy(data, tuple1, 32); memcpy(data+32, tuple2, 44); 

想法是分配内存等于tuple1tuple2的大小之和( tuple1是32个字节, tuple2是44)然后复制32个字节的tuple1并将它们粘贴到数据的地址,然后复制44个字节tuple2并将它们粘贴到数据地址后的32个字节。

问题是,如果我只复制tuple1或只复制tuple2它真的被复制到应该的位置(我打印的数据太长了,放在这里的function),但当我做两个内存复制时,第一个memcpy()工作很好,但第二个没有。

有谁可以帮我解决这个严重的问题?

我会怀疑对齐和/或填充的问题, tuple1tuple2的类型声明是什么?

你怎么知道它们的确切尺寸? 硬编码事物的代码是可疑的,应该使用sizeof而不是magic数字文字。

此外,您不应在C中calloc()的返回值。

用更小的东西开始实验,这更容易调试:

 void* tuple1 = calloc(2, 1); char* content1 = "ab"; memcpy(tuple1, content1, 2); void* tuple2 = calloc(4, 1); char* content2 = "cdef";; memcpy(tuple2, content2, 4); char *data = data = (char*) calloc (6, 1); memcpy(data, tuple1, 2); memcpy(data+2, tuple2, 4); printf("%.*s\n", 6, data); // should print: abcdef