Niekoniecznie.
Często robi jak z link that munissor posted, ale strona, Mac OS 10.5 człowiek mówi:
Jeśli rozmiar wynosi zero i ptr nie jest równe NULL, nowy, minimalne wielkości obiekt jest przydzielona i oryginalny obiekt jest uwolniony.
Co to jest "obiekt o minimalnej wielkości"? Cóż, każdy alokator przechowuje pewne informacje o alokacjach, a to zajmuje miejsce, które często jest przydzielane jako dodatek do miejsca zarezerwowanego dla użytkownika. Przypuszczalnie "obiekt o minimalnej wielkości" to tylko jeden z tych nagłówków plus zero bajtów przestrzeni zarezerwowanej dla użytkownika.
Zgaduję, że ten zapis jest obecny w celu wsparcia wdrożeń, które istniały w czasie standaryzacji, i że te implementacje są przydatne do debugowania zachowania przydziału.
Aby rozwiązać Jonathan's comments
Rozważmy różnicę między
for (int i=0; i<VERY_BIG_NUMBER; ++i){
char *p = malloc(sizeof(char[10]));
free(p);
}
i
for (int i=0; i<VERY_BIG_NUMBER; ++i){
char *p = malloc(sizeof(char[10]));
realloc(p,0);
}
Z sane realizacji malloc
i free
pierwszy klip robi nie zużywają pamięć bez ograniczeń. Ale jeśli implementacja realloc
zwróci te "obiekty o minimalnym rozmiarze", może.
Z pewnością ten przykład jest wymyślny i polega na zrozumieniu, co rozumiemy przez "obiekt o minimalnym rozmiarze", ale myślę, że tekst na to pozwala.
Krótko mówiąc, jeśli oznaczafree
powinieneś powiedzieć free
.
nice * gotcha * :) –