C Dynamické prideľovanie pamäte pomocou malloc (), calloc (), free () & realloc ()

V tomto výučbe sa naučíte dynamicky prideľovať pamäť vo vašom programe C pomocou štandardných knižničných funkcií: malloc (), calloc (), free () a realloc ().

Ako viete, pole je súborom pevne stanoveného počtu hodnôt. Po deklarácii veľkosti poľa ju nemôžete zmeniť.

Niekedy môže byť veľkosť poľa, ktorú ste deklarovali, nedostatočná. Ak chcete vyriešiť tento problém, môžete počas chodu alokovať pamäť manuálne. Toto sa v programovaní C nazýva dynamické prideľovanie pamäte.

Alokovať dynamickú pamätí, knižnica funkcie sú malloc(), calloc(), realloc()a free()sú používané. Tieto funkcie sú definované v hlavičkovom súbore.

C malloc ()

Názov „malloc“ znamená alokáciu pamäte.

malloc()Funkcia vyhradzuje blok pamäte zadaného počtu bajtov. A vráti ukazovateľ, z voidktorého je možné vložiť ukazovatele ľubovoľnej formy.

Syntax malloc ()

 ptr = (castType*) malloc(size);

Príklad

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

Vyššie uvedené vyhlásenie vyhradzuje 400 bajtov pamäte. Je to preto, že veľkosť floatje 4 bajty. A ukazovateľ ptr drží adresu prvého bajtu v pridelenej pamäti.

Výsledkom výrazu je NULLukazovateľ, ak nie je možné alokovať pamäť.

C calloc ()

Názov „calloc“ znamená súvislé prideľovanie.

malloc()Pamäťové funkcie prideľuje a listy pamäť neinicializované. Zatiaľ čo calloc()funkcia alokuje pamäť a inicializuje všetky bity na nulu.

Syntax calloc ()

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

Príklad:

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

Vyššie uvedené vyhlásenie vyhradzuje súvislý priestor v pamäti pre 25 prvkov typu float.

C zadarmo ()

Dynamicky alokovaná pamäť vytvorená buďto, calloc()alebo malloc()sa sama neuvoľní. Musíte výslovne použiť free()na uvoľnenie priestoru.

Syntax free ()

 free(ptr);

Toto vyhlásenie uvoľní miesto pridelené v pamäti, na ktorú ukazuje ptr.

Príklad 1: malloc () a 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 sme dynamicky pridelili pamäť pre n počet int.

Príklad 2: calloc () a 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 ()

Ak je dynamicky pridelená pamäť nedostatočná alebo viac, ako je potrebné, môžete pomocou realloc()funkcie zmeniť veľkosť predtým pridelenej pamäte .

Syntax objektu realloc ()

 ptr = realloc(ptr, x);

Tu je ptr prerozdelený s novou veľkosťou x.

Príklad 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; )

Po spustení programu bude výstup:

 Zadajte veľkosť: 2 Adresy predtým pridelenej pamäte: 26855472 26855476 Zadajte novú veľkosť: 4 Adresy novo pridelenej pamäte: 26855472 26855476 26855480 26855484

Zaujímavé články...