SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: einsteincora en Martes 23 de Diciembre de 2008, 11:22

Título: Función malloc no hace caso
Publicado por: einsteincora en Martes 23 de Diciembre de 2008, 11:22
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?¿
Título: Re: Función malloc no hace caso
Publicado por: Eternal Idol en Martes 23 de Diciembre de 2008, 11:31
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.
Título: Re: Función malloc no hace caso
Publicado por: einsteincora en Martes 23 de Diciembre de 2008, 11:44
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.
Título: Re: Función malloc no hace caso
Publicado por: Eternal Idol en Martes 23 de Diciembre de 2008, 12:13
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 ...
Título: Re: Función malloc no hace caso
Publicado por: einsteincora en Martes 23 de Diciembre de 2008, 12:23
Ok tio,muchas gracias por la aclaración!. ^_^