• Viernes 8 de Noviembre de 2024, 19:08

Autor Tema:  Función malloc no hace caso  (Leído 1601 veces)

einsteincora

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Función malloc no hace caso
« en: Martes 23 de Diciembre de 2008, 11:22 »
0
Hola a todos,
tengo un problema al pedir memoria con malloc, y es que me da mas de la cuenta.Es decir,le pido 1480 bytes y me da 1496,comprobado despues con strlen. Este es el código:

datos_utiles=(unsigned char *)malloc(1480*sizeof(unsigned char));
printf("Longitud datos_utiles:%dn",strlen(datos_utiles));

Entonces me imprime 1496. Si le intento cambiar el tamaño,por ejemplo por 1460, me da 1472. Es decir,me da mas memoria de la que le pido.
¿Alguien sabe porque puede ser esto?¿

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Función malloc no hace caso
« Respuesta #1 en: Martes 23 de Diciembre de 2008, 11:31 »
0
No tenes ningun problema mas que el que te estas queriendo crear sin necesidad alguna. No podes determinar el tamaño de la memoria reservada usando strlen, esa funcion lo unico que hace es buscar un 0 y tranquilamente puede salirse de los limites de la memoria reservada.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

einsteincora

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Función malloc no hace caso
« Respuesta #2 en: Martes 23 de Diciembre de 2008, 11:44 »
0
Es que al inspeccionar esa cadena en la memoria, en ella aparece la cadena que escribo en datos utiles mas otros 16 caracteres aleatorios, es decir en al inspeccionar la  memoria desde el Visual C++, realmente aparecen 1496 bytes.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Función malloc no hace caso
« Respuesta #3 en: Martes 23 de Diciembre de 2008, 12:13 »
0
Esa memoria NO es tuya, malloc te reserva lo que pedis, otra cosa es que no pueda a bajo nivel reservar atomicamente otra unidad que no sean paginas del sistema (4096 bytes en x86) y por lo tanto no sea directamente una pagina invalida justo despues del tamaño que reservas. No tiene sentido alguno lo que estas haciendo ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

einsteincora

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Función malloc no hace caso
« Respuesta #4 en: Martes 23 de Diciembre de 2008, 12:23 »
0
Ok tio,muchas gracias por la aclaración!. ^_^