Problema al copiar la memoria

Por lo tanto, hay un problema al que me estoy enfrentando durante dos noches seguidas:

(tuple1 y tuple2 son punteros nulos pasados ​​a esta función)

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

La idea es asignar memoria igual a la sum de los tamaños de tuple1 y tuple2 ( tuple1 es de 32 bytes y tuple2 es de 44) y luego copiar los 32 bytes de tuple1 y pegarlos en la dirección de datos y luego copiar los 44 bytes. de tuple2 y tuple2 32 bytes después de la dirección de los datos.

El problema es que si copio solo tuple1 o solo tuple2 , realmente se copia donde se supone que debe estar (estoy imprimiendo datos con una función demasiado larga para poner aquí), pero cuando hago las dos copias de memoria, funciona el primer memcpy() bien, pero el segundo no lo hace.

¿Puede alguien ayudarme con este grave problema?

Sospecharía problemas con la alineación y / o el relleno, ¿cuáles son las declaraciones de tipo tuple1 y tuple2 ?

¿Cómo sabes sus tamaños exactos? El código que codifica las cosas es sospechoso, debería haber algún uso de sizeof lugar de números literales mágicos.

Además, no debe convertir el valor de retorno de calloc() , en C.

Comience su experimento con algo más pequeño, que es más fácil de depurar:

 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