[C con Clase] Que problemas puede causar memcpy al introducir un buffer de datos en un struct

José Luis Torre joseluistorrehernandez en gmail.com
Lun Oct 8 10:58:46 CEST 2012


Hola Marta:

Aunque no te envío referencias, te comento cómo veo el tema que planteas.

La función memcpy() copia lo bytes que le idicas, en este caso 8, sobre
otra posición de memoria, en este caso una estructura pero podría ser
cualquier otra cosa.

Como lo que estas copiando son valores hexadecimales \x00, lo que estás
copiando son bytes 0 en dichas posiciones de memoria.

Si la dirección de memoria sobre la que vas a copiar es de tamaño
suficiente lo que ocurrirá es que sólo se modificará todo o parte de la
memoria, pero si no es suficientemente grande estarás escribiendo bytes 0
en memoria de otras partes del programa y por lo tanto se producirá un caos
total (no se sabe que es lo que puede pasar).

En el caso concreto que indicas dependiendo del compilador que utilices la
estructura podrá tener 4 u 8 bytes. Si tiene 4 bytes y escribes 8 bytes,
estarás sobreescribiendo 4 bytes de la memoria y podrá pasar cualquier
cosa. Si la estructura es de 8 bytes no tendrás problemas porque lo único
que pasa es que la estructura se rellenará a bits 0 y por lo tanto el valor
de los dos enteros será 0.

En relación al tema de big-endian o little-endian, si lo que escribes son
0x00 (es decir 00000000) no hay problema; otra cosa sería que escribieras
valores 0x00001111 ya que entonces según la forma de almacenar en memoria
se guardaría 0x00001111 o bien 0x1111000

Espero haber solucionado alguna duda.

Saludos
José Luis



memcpy(&estructura1,"\x00\x00\x00\x00\x00\x00\x00\x00",8);
>
> en este caso
> estructura1{
>     int a;
>     int b;
> }
>
> pero el struct podria ser de cualquier tipo de componentes. arrays char...
>
> Necesito literatura sobre si esta manera de copiar el valor directamente
> podria dar problemas en diferentes arquitecturas por gestionar la memoria
> del struct de diferente manera..
> tambien si pudiera haber problemas de endianess (esto si que he encontrado
> mas literatura)
>
> Alguien me podria ayudar, realmente necesito encontrar apuntes, o algun
> libro o algun sitio donde pueda leer sobre esto Ya que necesito definirlo
> de una forma tecnica y no se por donde empezar
>
> Muchas gracias
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
José Luis Torre
ww.ehu.es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20121008/41897066/attachment.html>


Más información sobre la lista de distribución Cconclase