Проблема при копировании памяти - PullRequest
0 голосов
/ 05 апреля 2011

Таким образом, есть проблема, я трясу головой в течение двух ночей подряд:

(tuple1 и tuple2 - пустые указатели, переданные этой функции)

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, это действительно копируется в том месте, где оно должно быть (я печатаю данные с слишком длинной функцией, чтобы поместить их здесь), но когда я делаю две памяти копирует первый memcpy() работает нормально, а второй нет.

Может кто-нибудь помочь мне с этой серьезной проблемой?

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Начните свой эксперимент с чего-то меньшего, что легче отладить:

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
1 голос
/ 05 апреля 2011

Я бы подозревал проблемы с выравниванием и / или заполнением, каковы объявления типов tuple1 и tuple2?

Как вы знаете их точные размеры?Код, который жестко кодирует вещи, является подозрительным, следует использовать sizeof вместо литералов магических чисел.

Кроме того, вы не должны приводить возвращаемое значение calloc() в C.

...