Hvordan gjøre Dynamic Storage Tildeling i C

I mange tilfeller, bestemmer brukeren på fly om et program vil behandle en matrise av 10 elementer eller 10.000. Fordi matrisen størrelse er ukjent på forhånd, må du sette av minne og slipp det under programkjøring. Denne minnehåndtering under kjøring er kjent i informatikk som dynamisk minnetildeling. Denne artikkelen fokuserer på de funksjonene som er dedikert til dynamisk minne allokering i C.

Bruksanvisning

1 Inkludere biblioteket filen med standard bibliotek definisjoner. Dette er "stdlib.h" -filen og det inkluderer blant annet viktige C-funksjoner, alle funksjoner som utfører dynamisk minnetildeling. For å inkludere denne bibliotekfilen i programmet, setter du inn følgende linje på toppen av din kilde / header fil.


Eksempel:

# include <stdlib.h>

2

Bestem hva du ønsker å gjøre. Deretter plukke funksjonen fra følgende trinn som best passer til minne tildeling handlingen du vil utføre.

3

Bruk malloc () for en minneblokk av kjent størrelse. "Malloc" tildeler "størrelse" byte og returnerer en peker til begynnelsen av blokken.


prototype:

void * malloc (size_t størrelse);

Eksempel:

int i;

char * buf;
printf ( "Skriv inn strengen lengde:");

scanf ( "% d", og i);

buf = (char *) malloc (i + 1);

if (NULL == buf) exit (1);

// etc

4

Anvende calloc () for en rekke elementer, hvor hvert element har en størrelse på mer enn en byte. "Calloc" tildeler en del av minne for "num" elementer hver element blir "størrelse" byte. Den returnerer en peker til begynnelsen av blokken.


prototype:

void * calloc (size_t num, size_t størrelse);

Eksempel:

int i, n;

int * Parr;

printf ( "Skriv antall heltall:");

scanf ( "% d", og i);

n = sizeof (int);

Parr = (int *) calloc (i, n);

if (NULL == Parr) exit (1);

// etc

5

Utnytte realloc () for å endre størrelsen på et minne blokk. "Realloc" utvider eller reduserer minneblokk "size" bytes som "PTR" pekte på.


prototype:

OID * realloc (void * ptr, size_t størrelse);

Eksempel:

int num1, num2;

int * arr = NULL;

gjøre {

printf ( "Skriv inn et positivt heltall:");

scanf ( "% d", og num1);

while (1> num1);

arr = (int *) calloc (num1, sizeof (int));

if (NULL == arr) exit (1);

gjøre {

printf ( "Skriv et positivt heltall:");

scanf ( "% d", og num2);

while (1> num2);

arr = (int *) realloc (arr, num2 * sizeof (int));

if (NULL == arr) exit (1);

// etc

6

Slipp en blokk med minne som er tildelt i trinn 3 til 5 ved hjelp av gratis (). "Free" frigjør minne blokk som starter på minneområde som "PTR" pekte på.


prototype:

void gratis (void * ptr);

Eksempel:

int * buf;

buf = (int *) malloc (100 * sizeof (int));

gratis (buf);

// etc

Hint

  • Dynamisk minne allokering kan gjøres av programmerer eller ved å programmere enheter kalt søppel samlere.
  • Mange programmer ikke klarer å frigjøre minne når det ikke lenger er nødvendig. Dette utilsiktet forbruk av minne kalles minnelekkasje.