Studijní materiály
EXTRA Kontakt

Funkce pro alokaci a dealokaci paměti v jazyce C

V jazyce C můžete dynamicky alokovat paměť pomocí funkcí malloc, calloc a realloc. Poté můžete paměť uvolnit pomocí funkce free. Tato flexibilita umožňuje efektivní správu paměti během běhu programu. V tomto výkladu se podrobně podíváme na tyto funkce a poskytneme konkrétní příklady jejich použití.

Funkce malloc

Funkce malloc slouží k alokaci paměti na základě požadovaného počtu bajtů a vrací ukazatel na počátek alokované paměti.

Příklad použití funkce malloc:

#include <stdio.h>
      #include <stdlib.h>
      
      int main() {
          int *pole;
      
          // Alokace paměti pro 5 celých čísel
          pole = (int *)malloc(5 * sizeof(int));
          if (pole == NULL) {
              printf("Chyba pri alokaci pameti.");
              return 1;
          }
      
          // Použití alokované paměti
          for (int i = 0; i < 5; i++) {
              pole[i] = i + 1;
          }
      
          // Uvolnění paměti
          free(pole);
      
          return 0;
      }
      

Funkce calloc

Funkce calloc slouží k alokaci paměti pro určený počet prvků daného typu a inicializuje je na nulu. Vrací ukazatel na počátek alokované paměti.

Příklad použití funkce calloc:

#include <stdio.h>
      #include <stdlib.h>
      
      int main() {
          int *pole;
      
          // Alokace paměti pro 5 celých čísel
          pole = (int *)calloc(5, sizeof(int));
          if (pole == NULL) {
              printf("Chyba pri alokaci pameti.");
              return 1;
          }
      
          // Použití alokované paměti
          for (int i = 0; i < 5; i++) {
              printf("%d ", pole[i]); // Výstup: 0 0 0 0 0
          }
      
          // Uvolnění paměti
          free(pole);
      
          return 0;
      }
      

Funkce realloc

Funkce realloc slouží k změně velikosti již alokované paměti. Pokud je nová velikost menší než původní, dochází k ořezání paměti. Pokud je nová velikost větší než původní, dochází k rozšíření paměti. Vrací ukazatel na nově alokovanou paměť.

Příklad použití funkce realloc:

#include <stdio.h>
      #include <stdlib.h>
      
      int main() {
          int *pole;
      
          // Alokace paměti pro 5 celých čísel
          pole = (int *)malloc(5 * sizeof(int));
          if (pole == NULL) {
              printf("Chyba pri alokaci pameti.");
              return 1;
          }
      
          // Změna velikosti paměti na 10 celých čísel
          pole = (int *)realloc(pole, 10 * sizeof(int));
          if (pole == NULL) {
              printf("Chyba pri realokaci pameti.");
              return 1;
          }
      
          // Uvolnění paměti
          free(pole);
      
          return 0;
      }
      

Funkce free

Funkce free slouží k uvolnění paměti alokované pomocí funkcí malloc, calloc nebo realloc. Po použití uvolňuje paměť pro další použití.

Příklad použití funkce free:

#include <stdio.h>
      #include <stdlib.h>
      
      int main() {
          int *pole;
      
          // Alokace paměti pro 5 celých čísel
          pole = (int *)malloc(5 * sizeof(int));
          if (pole == NULL) {
              printf("Chyba pri alokaci pameti.");
              return 1;
          }
      
          // Uvolnění paměti
          free(pole);
      
          return 0;
      }
      

Práce s dynamicky alokovanou pamětí

Při práci s dynamicky alokovanou pamětí je důležité dodržovat několik zásad:

  1. Vždy kontrolujte, zda alokace paměti proběhla úspěšně.
  2. Nezapomeňte uvolnit alokovanou paměť po jejím použití pomocí funkce free.
  3. Dbáte na správné použití ukazatelů a předcházejte únikům paměti.

Práce s dynamicky alokovanou pamětí je mocným nástrojem, který vám umožní efektivní správu paměti a flexibilitu při vytváření programů v jazyce C.