Provided by: manpages-pl-dev_0.5-1_all 

NAZWA
calloc, malloc, free, realloc - przydziela i zwalnia pamięć dynamiczną
SKŁADNIA
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
OPIS
Uwaga! To tłumaczenie może być nieaktualne!
calloc() przydziela pamięć dla tablicy zawierającej nmemb elementów, każdy o rozmiarze size bajtów i
zwraca wskaźnik do przydzielonej pamięci. Pamięć jest zerowana.
malloc() przydziela size bajtów i zwraca wskaźnik do przydzielonej pamięci. Pamięć nie jest czyszczona.
free() zwalnia obszar pamięci wskazywany przez ptr, który został wcześniej przydzielony za pomocą
wywołania malloc(), calloc() lub realloc(). W przeciwnym przypadku, lub gdy free(ptr) zostało już
wcześniej wywołane, funkcja zachowa się w sposób nieokreślony. Jeśli ptr jest równe NULL, nie zostanie
wykonana żadna operacja.
realloc() zmienia rozmiar bloku pamięci wskazywanego przez ptr na size bajtów. Zawartość nie zostanie
zmieniona w zakresie poniżej minimum ze starego i nowego rozmiaru; nowo przydzielona pamięć nie zostanie
zainicjalizowana. Jeśli ptr jest równe NULL, to wywołanie jest równoważne malloc(size); jeśli size jest
równe zeru, to wywołanie jest równoważne free(ptr). O ile ptr nie jest równe NULL, musi ono być zwrócone
przez wcześniejsze wywołanie malloc(), calloc() lub realloc().
WARTOŚĆ ZWRACANA
Dla calloc() i malloc(), zwracana wartość jest wskaźnikiem do przydzielonej pamięci, który jest właściwie
wyrównany dla dowolnego rodzaju zmiennej, lub NULL gdy żądanie zakończyło się niepowodzeniem.
free() nie zwraca żadnej wartości.
realloc() zwraca wskaźnik do nowoprzydzielonej pamięci, który jest właściwie wyrównany dla dowolnego
rodzaju zmiennej i może być różny od ptr, lub NULL gdy żądanie zakończy się niepowodzeniem. Jeśli rozmiar
był równy 0, zwracane jest NULL lub wskaźnik odpowiedni do przekazania go funkcji free(). Gdy realloc()
zakończy się niepowodzeniem, pierwotny blok zostaje nienaruszony - nie jest on ani zwalniany ani
przesuwany.
ZGODNE Z
ANSI-C
ZOBACZ TAKŻE
brk(2), posix_memalign(3)
UWAGI
Standard Unix98 wymaga, by malloc(), calloc() i realloc() przy wystąpieniu błędu nadawały errno wartość
ENOMEM. Glibc zakłada, że tak się dzieje (a wersje tych funkcji zawarte w glibc rzeczywiście to robią).
Jeśli wykorzystuje się własną implementację malloc, która nie ustawia errno, to pewne funkcje
biblioteczne mogą zawieść bez przekazania przyczyny w errno.
Załamania się w malloc(), free() czy realloc() są niemal zawsze związane z uszkodzeniami sterty, takimi
jak przekroczenia rozmiaru przydzielonego fragmentu lub dwukrotne zwolnienie tego samego wskaźnika.
Nowe wersje linuksowej biblioteki libc (późniejsze niż 5.4.23) i GNU libc (2.x) zawierają implementację
malloc, którą można dostrajać za pośrednictwem zmiennych środowiskowych. Przy ustawionej zmiennej
MALLOC_CHECK_ stosowana jest specjalna (mniej wydajna) implementacja. Zgodnie z zamierzeniami, powinna
być bardziej odporna na proste błędy, jak podwójne wywołania free() z tym samym argumentem czy
przekroczenia o pojedynczy bajt (błędy off-by-one). Nie chroni jednak przed wszystkimi tego rodzaju
błędami, w wyniku których mogą powstać wycieki pamięci. Jeśli MALLOC_CHECK_ ma wartość 0, jakiekolwiek
wykryte uszkodzenie sterty zostanie milcząco zignorowane; jeśli ma wartość 1, na stderr wypisywany będzie
komunikat diagnostyczny; jeśli ma wartość 2, to natychmiast zostanie wywołane abort(). Może się to
przydać, gdyż w przeciwnym razie załamanie się mogłoby wystąpić dużo później, a prawdziwa przyczyna
kłopotów byłaby wówczas bardzo trudna do wyśledzenia.
Linux stosuje optymistyczną strategię przydzielania pamięci. Oznacza to, że gdy malloc() zwraca wartość
różną od NULL, nie ma gwarancji, iż pamięć faktycznie jest dostępna. Jeśli okaże się, że systemowi
brakło pamięci, niesławny zabójca OOM zabije jeden lub więcej procesów.
INFORMACJE O TŁUMACZENIU
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:
man --locale=C 3 malloc
Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.
GNU 1993-04-04 MALLOC(3)