Provided by: manpages-pl-dev_20060617-1_all bug

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

       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.