复制内存时出现问题

时间:2011-04-05 15:53:47

标签: c memcpy

所以我有一个问题,我连续两个晚上连续敲打:

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

char *data;

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

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

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

任何人都可以帮我解决这个严重的问题吗?

2 个答案:

答案 0 :(得分:1)

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

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

此外,您不应在C。

中转换calloc()的返回值

答案 1 :(得分:1)

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

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