Spis treści

Start Zajęcia 1 Zajęcia 2 Zajęcia 3 Zajęcia 4 Zajęcia 5 Zajęcia 6 Zajęcia 7 Zajęcia 8 Zajęcia 9 Zajęcia 10 Pliki z zajęć

Zajęcia 9 - Dynamiczny przydział pamięci

Funkcja malloc() i free()

#include <stdlib.h>

void *malloc(size_t rozmiar);
void free(void *wskaznik);
  
void *realloc(void *wskaznik, size_t rozmiar);
void *calloc(size_t ile, size_t rozmiar);

Dokładny opis powyższych funkcji na stornie Wikipedii
Funkcje z biblioteki stdlib

Przykład zastosowania funkcji malloc()

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   float stab[10];
   float *dtab;
 
   int n,i;
 
   printf("Podaj rozmiar :"); 
   scanf("%d",&n);
 
   dtab = (float *) malloc(n * sizeof(float));
 
   if(dtab == NULL) 
   {
      printf("Blad przydzialu pamieci\n");
      exit(1);
   }
 
   for(i=0;i<n;i++)
   {
      *(dtab+i) = rand()/(RAND_MAX + 1.0);
      *(stab+i) = dtab[i];   // Blad gdy n > 10
   }
 
   while(--n >= 0) printf("%.4f %.4f\n",dtab[n],stab[n]);
 
   free(dtab);
   // free(stab);   !!! Blad
}

Ćwiczenia

Zadania domowe

  1. do programu z ćwiczeń dopisz funkcję iloczyn, która wykonuje morzenie dwóch macierzy. Funkcja zwraca adres macierzy zawierającej wynik operacji mnożenia lub wartość NULL gdy podane macierze miały nieodpowiedni rozmiar
  2. przekształć bazę danych osobowych z poprzednich zajęć tak aby tablica zawierająca struktury była przydzielana dynamicznie. Na tworzymy bazę mogącą pomieścić 10 wpisów a przypadku gdy tablica zostanie całkowicie wypełniona zwiększamy jej rozmiar dwukrotnie (za pomocą funkcji realloc)