Relación Malloc y Realloc, ¿Cómo se maneja cuando el espacio requerido no está disponible en la memoria [duplicado]?
Posible duplicado:
funciones de realloc y malloc
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *p;
p = malloc(6);
p = realloc(p, 10);
if (p == NULL)
{
printf("error"); // when does p point to null consider i have enough space in prgrm
//memory area but not in memory where realloc is trying to search
//for the memory, I dont know how to explain that try to undrstnd
exit(1);
}
}
Tome este ejemplo para el código, suponga que la memoria total es de 10 bytes y la declaración de puntero para escribir int int y ohter 6 bytes por la función malloc los 2 bytes restantes están ocupados por otros programas, ahora cuando ejecuto la función realloc para ampliar la memoria a la que apunta el puntero, buscará 10 bytes en la memoria y, cuando no esté disponible, asignará 10 bytes de memoria del área de almacenamiento dinámico y copiará el contenido de malloc y lo pegará en el área de memoria nueva asignada en el área de almacenamiento dinámico y Luego borra la memoria almacenada en malloc ¿verdad?
¿Realloc () devuelve un puntero NULO porque la memoria no está disponible? ¿No es cierto? ¿Va al área de almacenamiento para la asignación de memoria? No devuelve un puntero nulo ¿verdad?
Escúchame: | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
considere esto como bloques de memoria: suponga que el 01 a 06 ha sido utilizado por malloc () func, 07 y 08 son libres y los últimos 2 bloques i, e 09 y 10 están siendo usados por la memoria de otros programas. Ahora, cuando llamo a realloc (p, 10) necesito 10 bytes, pero solo hay 2 bytes libres, entonces, ¿qué hace realloc? devuelva un puntero NULO o asigne memoria desde el área de almacenamiento dinámico y copie los contenidos de 01 a 06 bloques de memoria a esa memoria en el área de almacenamiento dinámico, avíseme.