C Dinamično dodeljevanje pomnilnika z uporabo malloc (), calloc (), free () in realloc ()

V tej vadnici se boste naučili dinamičnega dodeljevanja pomnilnika v vašem programu C z uporabo standardnih knjižničnih funkcij: malloc (), calloc (), free () in realloc ().

Kot veste, je matrika zbirka določenega števila vrednosti. Ko je določena velikost matrike, je ne morete več spremeniti.

Včasih je velikost polja, ki ste ga prijavili, morda nezadostna. Če želite odpraviti to težavo, lahko med izvajanjem pomnilnik dodelite ročno. To je znano kot dinamično dodeljevanje pomnilnika pri programiranju C.

Dodeliti pomnilnika dinamično, knjižnične funkcije malloc(), calloc(), realloc()in free()se uporabljajo. Te funkcije so definirane v glavi datoteke.

C malloc ()

Ime "malloc" pomeni dodeljevanje pomnilnika.

malloc()Funkcija pridržuje blok spomin na določeno število bajtov. In vrne kazalec, voidki ga je mogoče vliti v kazalce katere koli oblike.

Sintaksa malloc ()

 ptr = (castType*) malloc(size);

Primer

 ptr = (float*) malloc(100 * sizeof(float));

Zgornji stavek dodeli 400 bajtov pomnilnika. To je zato, ker je velikost float4 bajtov. Kazalec ptr vsebuje naslov prvega bajta v dodeljenem pomnilniku.

Izraz ima za posledico NULLkazalec, če pomnilnika ni mogoče dodeliti.

C calloc ()

Ime "calloc" pomeni sosednjo dodelitev.

malloc()Spominske funkcije razporeja in listi spomin nezačeto. Ker je calloc()spomin funkcije razporeja in inicializira vse bitov na ničlo.

Sintaksa calloc ()

 ptr = (castType*)calloc(n, size);

Primer:

 ptr = (float*) calloc(25, sizeof(float));

Zgornja izjava dodeli sosednji prostor v pomnilniku za 25 elementov tipa float.

C brezplačno ()

Dinamično dodeljeni pomnilnik, ustvarjen z enim calloc()ali malloc()ne, se ne sprosti sam. Za free()sprostitev prostora morate izrecno uporabiti .

Sintaksa prostega ()

 free(ptr);

Ta izjava osvobodi prostor, dodeljen v pomnilniku, ki ga kaže ptr.

Primer 1: malloc () in free ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; printf("Enter number of elements: "); scanf("%d", &n); ptr = (int*) malloc(n * sizeof(int)); // if memory cannot be allocated if(ptr == NULL) ( printf("Error! memory not allocated."); exit(0); ) printf("Enter elements: "); for(i = 0; i < n; ++i) ( scanf("%d", ptr + i); sum += *(ptr + i); ) printf("Sum = %d", sum); // deallocating the memory free(ptr); return 0; ) 

Tu smo dinamično dodelili pomnilnik za n število int.

Primer 2: calloc () in free ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; printf("Enter number of elements: "); scanf("%d", &n); ptr = (int*) calloc(n, sizeof(int)); if(ptr == NULL) ( printf("Error! memory not allocated."); exit(0); ) printf("Enter elements: "); for(i = 0; i < n; ++i) ( scanf("%d", ptr + i); sum += *(ptr + i); ) printf("Sum = %d", sum); free(ptr); return 0; ) 

C realloc ()

Če je dinamično dodeljenega pomnilnika premalo ali več, kot je potrebno, lahko s realloc()funkcijo spremenite velikost predhodno dodeljenega pomnilnika .

Sintaksa realloc ()

 ptr = realloc(ptr, x);

Tu je ptr prerazporejen z novo velikostjo x.

Primer 3: realloc ()

 #include #include int main() ( int *ptr, i , n1, n2; printf("Enter size: "); scanf("%d", &n1); ptr = (int*) malloc(n1 * sizeof(int)); printf("Addresses of previously allocated memory: "); for(i = 0; i < n1; ++i) printf("%u",ptr + i); printf("Enter the new size: "); scanf("%d", &n2); // rellocating the memory ptr = realloc(ptr, n2 * sizeof(int)); printf("Addresses of newly allocated memory: "); for(i = 0; i < n2; ++i) printf("%u", ptr + i); free(ptr); return 0; )

Ko zaženete program, bo rezultat:

 Vnesite velikost: 2 naslovi predhodno dodeljenega pomnilnika: 26855472 26855476 Vnesite novo velikost: 4 naslovi na novo dodeljenega pomnilnika: 26855472 26855476 26855480 26855484

Zanimive Članki...