Spis treści

Dynamiczny przydział pamięci

Funkcja malloc() i free()

Funkcja malloc alokuje pamięć zaś funkcja free pozwala zwolnić przydzieloną pamięć.
Funkcje te zadeklarowane są w pliku stdlib.h

#include <stdlib.h>
void *malloc(size_t rozmiar);
void free(void *wskaznik);

Funkcja malloc alokuje pamięć o padanym rozmiarze (w bajtach). Np. tablica 100 liczb całkowitych potrzebuje sizeof(int)*100 bajtów. Wartością zwracaną jest adres początku zaalokowanej pamięci, który należy zrzutować na wskaźnik do odpowiedniego typu.

int *x = (int*)malloc(100*sizeof(int));

Jeżeli operacja alokacji pamięci się nie powiodła zwracana jest wartość NULL (adres 0)

Przykład

#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
}

Plik źródłowy: malloc.c

Zadanie - Dane z pliku

Napisz program, który posortuje liczby rzeczywiste umieszczone w pliku dane.txt. Plik może zawierać dowolną ilość liczb rzeczywistych oddzielonych białymi znakami. Liczby powinny zostać umieszczone w tablicy o takim rozmiarze aby pomieścić wszystkie liczby z pliku.

Dane: plik tekstowy dane.txt
Wynik: ciąg liczb w kolejności od najmniejszej do największej

Algorytm sortowania umieść w stosownej funkcji.

Zadanie - Macierz

Zaimplementuj program, który wykona mnożenie dwóch macierzy. W tym celu zaimplementuj następujące funkcje:

Struktura alokacji pamięci dla macierzy

Zadania domowe

  1. W programie sortującym liczby z pliku wykorzystaj funkcję qsort z biblioteki stdlib.h lub zaimplementuj własną wersję algorytmu Quick sort
  2. Do programu wyznaczającego iloczyn macierzy dodaj następujące funkcjonalności:
    • program pozwala na zapisanie macierzy wynikowej do pliku tekstowego
    • program pozwala na wczytanie dwóch macierzy z plików tekstowych po czym wykonuje na nich operacje mnożenia