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
slouží k alokaci paměti na základě požadovaného počtu bajtů a vrací ukazatel na počátek alokované paměti.
#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
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.
#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
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ěť.
#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
slouží k uvolnění paměti alokované pomocí funkcí malloc
, calloc
nebo realloc
. Po použití uvolňuje paměť pro další použití.
#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;
}
Při práci s dynamicky alokovanou pamětí je důležité dodržovat několik zásad:
free
.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.