Funkcje zarządzania pamięcią
malloc<STDLIB.H>
Służy do dynamicznego przydziału pamięci. Przydzielany blok pamięci nie może przekroczyć 64 KB. Ponieważ funkcja jest typu void, to każdorazowo musimy dokonać konwersji na typ zmiennej, której pamięć przydzielamy.
Składnia:void *malloc(size_t ile);
gdzie:ile - ilość bajtów pamięci przydzielonych zmiennej
Zwracana wartość:Funkcja zwraca wskaźnik do przydzielonego zmiennej obszaru pamięci.
Przykład:
#include <stdio.h>
#include <alloc.h>
#include <string.h>

void main(void)
{ char *str;

  // przydzielenie pamięci dla zmiennej
  if ((str = (char *) malloc(15)) == NULL)
  {  printf("Brak wolnej pamięci\n");
     return;
  }
  strcpy(str, "Test malloc");	// skopiowanie tekstu do zmiennej
  printf("Zmienna zawiera: %s\n", str);
  free(str);			// zwolnienie przydzielonej pamięci
}
calloc<STDLIB.H>
Rezerwacja pamięci dla tablicy o określonej ilości elementów, z których każdy ma stały rozmiar. Funkcja bardzo przydatna, gdy potrzebujemy w programie tablicy, ale w chwili pisania go nie wiemy jeszcze jaki rozmiar tablicy będzie nam potrzebny.
Składnia:void *calloc(size_t n, size_t bajtów);
gdzie:n - ilość tworzonych elementów tablicy
bajtów - rozmiar pojedynczego elementu tablicy w bajtach
Zwracana wartość:Funkcja zwraca wskaźnik do przydzielonego zmiennej obszaru pamięci.
Przykład:
#include <stdio.h>
#include <alloc.h>

void main(void)
{ double *d;

  // przydział pamięci dla 100 elementów typu double
  d = (double *) calloc(100, sizeof(double))

   ...

  free(str);	// zwolnienie przydzielonej pamięci
}
realloc<STDLIB.H>
Funkcje zmienia rozmiar pamięci przydzielony wcześniej zmiennej funkcjami malloc, callock lub realloc. Nowy obszar może znajdować się w innym miejscu pamięci, ale kopiowana jest do niego zawartość dotychczas przydzielonej pamięć. Jeżeli zmienna, której przydzielany pamięć wskazuje na NULL, to funkcja realloc działa identycznie, jak funkcja malloc.
Składnia:void *realloc(void *blok, size_t ile);
gdzie:blok - dotychczasowy adres zmiennej;
ile - nowa wielkość przydzielonej pamięci w bajtach.
Zwracana wartość:Funkcja zwraca wskaźnik do przydzielonego zmiennej nowego obszaru pamięci.
Przykład:
#include <stdio.h>
#include <alloc.h>
#include <string.h>

void main(void)
{ char *str;

  str = (char *) malloc(10);           // przydział pamięci do zmiennej
  strcpy(str, "Tekst nr 1");
  printf("Zmienna: %s\n  Adres zmiennej: %p\n", str, str);
  str = (char *) realloc(str, 30);
  strcat(str, " i dopisany łańcuch");  // zwiększenie przydzielonej pamięci
  printf("Zmienna: %s\n  Adres zmiennej: %p\n", str, str);
  free(str);                           // zwolnienie pamięci
}
free<STDLIB.H>
Zwalnia pamięć, która została wcześniej przydzielona zmiennej którąś z funkcji: malloc, calloc lub realloc.
Składnia:void free(void *block);
gdzie:blok - wskaźnik do zmiennej, której pamięć zwalniamy.
Zwracana wartość:brak
Przykład:
#include <stdio.h>
#include <alloc.h>
#include <string.h>

void main(void)
{ char *str;
  double *d;

  // przydział pamięci dla zmiennej d
  d = (double *) calloc(100, sizeof(double))
  // przydział pamięci dla zmiennej str
  str = (char *) malloc(10);

  ...............
  
  free(str);    // zwolnienie pamięci zmiennej str
  free(d);      // zwolnienie pamięci zmiennej d
}