C Dynamická alokace paměti pomocí malloc (), calloc (), free () & realloc ()

V tomto kurzu se naučíte dynamicky přidělovat paměť ve vašem programu C pomocí standardních knihovních funkcí: malloc (), calloc (), free () a realloc ().

Jak víte, pole je kolekce pevného počtu hodnot. Jakmile je deklarována velikost pole, nemůžete ji změnit.

Někdy může být velikost deklarovaného pole nedostatečná. Chcete-li tento problém vyřešit, můžete během běhu přidělit paměť ručně. Toto se v programování C nazývá dynamické přidělování paměti.

Alokovat dynamickou pamětí, knihovna funkce jsou malloc(), calloc(), realloc()a free()jsou používány. Tyto funkce jsou definovány v hlavičkovém souboru.

C malloc ()

Název „malloc“ znamená alokaci paměti.

malloc()Funkce vyhrazuje blok paměti zadaného počtu bajtů. A vrací ukazatel, voidkterý lze vložit do ukazatelů jakékoli formy.

Syntaxe malloc ()

 ptr = (castType*) malloc(size);

Příklad

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

Výše uvedený příkaz přiděluje 400 bajtů paměti. Je to proto, že velikost floatje 4 bajty. Ukazatel ptr drží adresu prvního bajtu v přidělené paměti.

Výsledkem výrazu je NULLukazatel, pokud nelze alokovat paměť.

C calloc ()

Název „calloc“ znamená souvislou alokaci.

malloc()Paměťové funkce přiděluje a listy paměť neinicializované. Zatímco calloc()funkce přiděluje paměť a inicializuje všechny bity na nulu.

Syntaxe calloc ()

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

Příklad:

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

Výše uvedený příkaz přiděluje souvislý prostor v paměti pro 25 prvků typu float.

C zdarma ()

Dynamicky přidělená paměť vytvořená buďto, calloc()nebo malloc()se sama neuvolní. Musíte explicitně použít free()k uvolnění prostoru.

Syntaxe free ()

 free(ptr);

Tento příkaz uvolní místo přidělené v paměti, na kterou ukazuje ptr.

Pří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; ) 

Zde jsme dynamicky přidělili paměť pro n počet int.

Pří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 ()

Pokud je dynamicky přidělená paměť nedostatečná nebo větší, než je požadováno, můžete pomocí realloc()funkce změnit velikost dříve přidělené paměti .

Syntaxe realloc ()

 ptr = realloc(ptr, x);

Zde je ptr přerozděleno s novou velikostí x.

Pří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; )

Když spustíte program, výstup bude:

 Zadejte velikost: 2 Adresy dříve přidělené paměti: 26855472 26855476 Zadejte novou velikost: 4 Adresy nově přidělené paměti: 26855472 26855476 26855480 26855484

Zajímavé články...