Relacja Malloc i Realloc, w jaki sposób radzi sobie, gdy wymagane miejsce nie jest dostępne w pamięci [duplikat]
Możliwy duplikat:
funkcje realloc i 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);
}
}
Weźmy ten przykład dla kodu, załóżmy, że całkowita pamięć wynosi 10 bajtów, a 2 bajty są używane przez deklarację wskaźnika do typu int i o 6 bajtów przez funkcję malloc pozostałe 2 bajty są zajmowane przez inne programy, teraz, gdy uruchomię funkcję realokacji aby rozszerzyć pamięć wskazywaną przez wskaźnik, będzie wyszukiwał 10 bajtów w pamięci, a gdy nie jest dostępny, przydziela 10 bajtów pamięci z obszaru sterty i kopiuje zawartość malloc i wkleja ją do nowego przydzielonego obszaru pamięci w obszarze sterty i następnie usuń pamięć zapisaną w malloc?
Czy realloc () zwraca wskaźnik NULL, ponieważ pamięć jest niedostępna? Bez prawa!? Czy trafia do obszaru sterty dla właściwej alokacji pamięci? Nie zwraca on wskaźnika NULL w prawo?
Posłuchaj mnie: | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
rozważ to jako bloki pamięci: załóżmy, że od 01 do 06 użyto malloc () func, 07 i 08 są wolne, a ostatnie 2 bloki i, e 09 i 10 są używane przez pamięć innych programów. Teraz, gdy wywołam realloc (p, 10), potrzebuję 10 bajtów, ale są tylko 2 wolne bajty, więc co robi realloc? zwróć wskaźnik NULL lub przydziel pamięć z obszaru sterty i skopiuj zawartość bloków pamięci 01 do 06 do tej pamięci w obszarze sterty, daj mi znać.