复制内存时出现问题
所以我有一个问题,我连续两个晚上连续爆炸:
(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)然后复制32个字节的tuple1
并将它们粘贴到数据的地址,然后复制44个字节tuple2
并将它们粘贴到数据地址后的32个字节。
问题是,如果我只复制tuple1
或只复制tuple2
它真的被复制到应该的位置(我打印的数据太长了,放在这里的function),但当我做两个内存复制时,第一个memcpy()
工作很好,但第二个没有。
有谁可以帮我解决这个严重的问题?
我会怀疑对齐和/或填充的问题, tuple1
和tuple2
的类型声明是什么?
你怎么知道它们的确切尺寸? 硬编码事物的代码是可疑的,应该使用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