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.
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/.