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

NAZWA

       calloc, malloc, free, realloc - przydziela i zwalnia pami dynamiczn

SK/LADNIA

       #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 zawierajcej nmemb elementow, kady
       o rozmiarze size bajtow i zwraca wskanik do przydzielonej pamici.  Pami
       jest zerowana.

       malloc()  przydziela  size  bajtow  i  zwraca  wskanik do przydzielonej
       pamici.  Pami nie jest czyszczona.

       free()  zwalnia  obszar  pamici  wskazywany  przez  ptr,  ktory  zostal
       wczeniej   przydzielony  za  pomoc  wywolania  malloc(),  calloc()  lub
       realloc().  W  przeciwnym  przypadku,  lub  gdy  free(ptr)  zostalo  ju
       wczeniej  wywolane,  funkcja zachowa si w sposob nieokrelony.  Jeli ptr
       jest rowne NULL, nie zostanie wykonana adna operacja.

       realloc() zmienia rozmiar bloku pamici wskazywanego przez ptr  na  size
       bajtow.   Zawarto  nie  zostanie zmieniona w zakresie poniej minimum ze
       starego  i  nowego  rozmiaru;  nowo  przydzielona  pami  nie   zostanie
       zainicjalizowana.    Jeli  ptr  jest  rowne  NULL,  to  wywolanie  jest
       rownowane malloc(size); jeli size jest rowne zeru,  to  wywolanie  jest
       rownowane  free(ptr).   O  ile  ptr  nie  jest  rowne NULL, musi ono by
       zwrocone przez wczeniejsze wywolanie malloc(), calloc() lub realloc().

WARTO ZWRACANA

       Dla  calloc()  i  malloc(),   zwracana   warto   jest   wskanikiem   do
       przydzielonej  pamici,  ktory  jest  wlaciwie  wyrownany  dla dowolnego
       rodzaju zmiennej, lub NULL gdy danie zakoczylo si niepowodzeniem.

       free() nie zwraca adnej wartoci.

       realloc()  zwraca  wskanik  do  nowoprzydzielonej  pamici,  ktory  jest
       wlaciwie wyrownany dla dowolnego rodzaju zmiennej i moe by rony od ptr,
       lub NULL gdy danie zakoczy si niepowodzeniem. Jeli rozmiar byl rowny 0,
       zwracane  jest  NULL  lub  wskanik odpowiedni do przekazania go funkcji
       free().   Gdy  realloc()  zakoczy  si  niepowodzeniem,  pierwotny  blok
       zostaje nienaruszony - nie jest on ani zwalniany ani przesuwany.

ZGODNE Z

       ANSI-C

ZOBACZ TAKE

       brk(2), posix_memalign(3)

UWAGI

       Standard   Unix98  wymaga,  by  malloc(),  calloc()  i  realloc()  przy
       wystpieniu bldu nadawaly errno warto ENOMEM. Glibc zaklada,  e  tak  si
       dzieje  (a  wersje  tych  funkcji zawarte w glibc rzeczywicie to robi).
       Jeli wykorzystuje si  wlasn  implementacj  malloc,  ktora  nie  ustawia
       errno,   to  pewne  funkcje  biblioteczne  mog  zawie  bez  przekazania
       przyczyny w errno.

       Zalamania si w malloc(), free() czy realloc() s niemal zawsze zwizane z
       uszkodzeniami  sterty, takimi jak przekroczenia rozmiaru przydzielonego
       fragmentu lub dwukrotne zwolnienie tego samego wskanika.

       Nowe wersje linuksowej biblioteki libc (poniejsze ni 5.4.23) i GNU libc
       (2.x)  zawieraj implementacj malloc, ktor mona dostraja za porednictwem
       zmiennych  rodowiskowych.  Przy   ustawionej   zmiennej   MALLOC_CHECK_
       stosowana  jest  specjalna  (mniej  wydajna)  implementacja.  Zgodnie z
       zamierzeniami, powinna by bardziej odporna na proste bldy, jak podwojne
       wywolania  free() z tym samym argumentem czy przekroczenia o pojedynczy
       bajt (bldy  off-by-one).   Nie  chroni  jednak  przed  wszystkimi  tego
       rodzaju  bldami,  w  wyniku  ktorych  mog  powsta wycieki pamici.  Jeli
       MALLOC_CHECK_ ma  warto  0,  jakiekolwiek  wykryte  uszkodzenie  sterty
       zostanie  milczco  zignorowane;  jeli  ma warto 1, na stderr wypisywany
       bdzie komunikat diagnostyczny; jeli ma warto 2, to natychmiast zostanie
       wywolane  abort().   Moe si to przyda, gdy w przeciwnym razie zalamanie
       si mogloby wystpi duo poniej, a  prawdziwa  przyczyna  klopotow  bylaby
       wowczas bardzo trudna do wyledzenia.

       Linux stosuje optymistyczn strategi przydzielania pamici. Oznacza to, e
       gdy malloc() zwraca warto  ron  od  NULL,  nie  ma  gwarancji,  i  pami
       faktycznie  jest  dostpna.   Jeli  okae  si, e systemowi braklo pamici,
       nieslawny zabojca OOM zabije jeden lub wicej procesow.

INFORMACJE O T/LUMACZENIU

       Powysze tlumaczenie pochodzi z nieistniejcego ju  Projektu  Tlumaczenia
       Manuali  i  moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
       opisem a rzeczywistym zachowaniem  opisywanego  programu  lub  funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.