Manpages

NAAM

calloc, malloc, free, realloc − Reserveren en vrijmaken van dynamisch geheugen

BESCHRIJVING

#include <stdlib.h>

void *calloc(size_t n, size_t grootte);
void *malloc(size_t
grootte);
void free(void
*wzr);
void *realloc(void
*wzr, size_t grootte);

BESCHRIJVING

calloc() Reserveert geheugen voor een tabel van n elementen van grootte bytes elk, en geeft een wijzer naar het toegewezen geheugen terug. Het geheugen wordt ge’nul’d.

malloc() Reserveert grootte bytes geheugen en geeft een wijzer naar het gereserveerde geheugen terug. Het geheugen wordt niet schoon gemaakt.

free() Maakt de geheugen-ruimte waar wzr naar wijst vrij, geheugen dat gereserveerd moet zijn door een eerdere aanroep naar malloc(), calloc() of realloc(). Anders, of als free(wzr) al eerder werd aangeroepen, ontstaat onbepaald gedrag. Als wzr NULL is wordt niets gedaan.

realloc() Verandert de grootte van het geheugen-blok waar wzr naar wijst in grootte bytes. De inhoud zal onveranderd blijven tot het minimum van de oude en nieuwe maten; nieuw gereserveerd geheugen zal niet worden geïnitialiseerd. Als wzr NULL is, is de aanroep gelijk aan malloc(grootte); als grootte gelijk aan nul is, is de aanroep gelijk aan free(wzr). Tenzij wzr NULL is, moet het teruggegeven zijn door een eerdere aanroep naar malloc(), calloc() of realloc().

EIND WAARDE

Voor calloc() en malloc(), is de teruggegeven waarde een wijzer naar het gereserveerde geheugen, dat geschikt is opgelijnd voor het soort variabele, of NULL als de aanvraag mislukt.

free() Geeft geen waarde terug.

realloc() Geeft een wijzer naar het nieuw gereserveerde geheugen, wat geschikt is opgelijnd voor de soort variabele. Het kan verschillen van wzr. Het is NULL als de aanvraag mislukt, of als de grootte gelijk is aan 0. Als realloc() niet slaagt blijft het originele blok onveranderd - het wordt niet vrijgegeven of verplaatst.

VOLDOET AAN

ANSI-C

ZIE OOK

brk(2)

OPMERKINGEN

De Unix98 standaard vereist van malloc(), calloc(), en realloc() dat ze errno naar ENOMEM zetten bij mislukken. Glibc neemt aan dat dit wordt gedaan (en de glibc versie van deze routines doen dit); als u een privé malloc implementatie gebruikt dat errno niet zet, dan zullen bepaalde bibliotheek routines falen zonder een reden te vermelden met errno.

’Crash-es’ in malloc(), free() of realloc() zijn vrijwel altijd gerelateerd aan stapel {heap} corruptie, zoals overschrijden van een toegewezen homp of vrijmaken van dezelfde wijzer twee keer.

Recente versies van Linux libc (later dan 5.4.23) en GNU libc (2.x) bevatten een malloc implementatie die instelbaar is via omgevingsvariabelen Wanneer MALLOC_CHECK_ gezet is, wordt een speciale (minder snelle) implementatie gebruikt die ontworpen is om tolerant te zijn voor eenvoudige fouten, zoals dubbele aanroepen van free() met hetzelfde argument, of overschrijden van een buffer met een enkele byte (off-by-one bugs). Niet tegen all dergelijke fouten kan echter worden beschermd, en geheugen lekken kunnen resulteren. Als MALLOC_CHECK_ gezet is naar 0, elke opgemerkte stapel {heap} corruptie wordt stilletjes genegeerd; als gezet naar 1, wordt een diagnose gegeven op stderr; als gezet naar 2, wordt onmiddellijk abort() aangeroepen om het krakkemikkige programma uit zijn lijden te verlossen. Dit kan bruikbaar zijn omdat anders later een crash kan optreden, en de ware oorzaak van het probleem dan moeilijk te achterhalen is.

VERTALING

Dit is een handleiding uit manpages-nl 1.34. Alles wat tussen ’{’..’}’ staat is aanvullende vertaling, en hoort niet bij de originele handleiding. Email naar <manpages-nl [AT] nl.org>.

$Id: malloc.3,v 1.1.1.1 2004/03/21 21:02:25 cor Exp $