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

Biblioteka operacji na macierzach

W pliku macierz.h zadeklaruj strukturę o nazwie macierz która zawiera następujące pola:

pole w typu całkowitego określające ilość wierszy macierzy

pole k typu całkowitego określające ilość kolumn macierzy

pole wsp typu float** (wskaźnik do wskaźnika do liczby rzeczywistej), tutaj w dynamicznie utworzonej macierzy o odpowiedniej liczbie wierszy i kolumn przechowywane będą elementy macierzy

W plikach macierz.h i macierz.c zadeklaruj i zdefiniuj następujące funkcje:

utwórz_macierz - argumentami funkcji są rozmiary macierzy (ilość wierszy i kolumn). Wartością zwracaną jest struktura macierz (zobacz punkt wyżej) posiadająca pole wsp zawierające adres do dynamicznie utworzonej macierzy typu float (tablica zawierająca wskaźniki typu float) lub NULL gdy tworzenie macierzy się nie powiodło

wczytaj_macierz - dla danej w argumencie macierzy wczytuje ze standardowego wejścia (z klawiatury) wszystkie elementy

wyświetl_macierz - wyświetla na standardowym wyjściu (na ekranie) zawartość podanej w argumencie macierzy

zwolnij_macierz - zwalnia pamięć zajętą przez macierz

dodaj_macierze - wykonuje operację dodawania dwóch macierzy (o odpowiednich rozmiarach). Argumentami funkcji są dwie macierze (zakładamy, że macierze posiadają identyczne wymiary). Wartością zwracaną jest struktura zawierająca nową macierz - rezultat dodawania. W przypadku gdy dodawane macierze posiadają różne wymiary wówczas funkcja zwraca pustą macierz (liczba wierszy i kolumn wynosi 0 a wskaźnik do elementów zawiera wartość NULL).

wykorzystując powyższe funkcje napisz program, który wczyta z klawiatury dwie macierze o podanym przez użytkownika rozmiarze a następnie wyświetli sumę tych macierzy

Zadania domowe

Do programu z ćwiczeń dopisz funkcję iloczyn, która wykonuje morzenie dwóch macierzy. Funkcja zwraca nową macierz (odpowiednią strukturę) zawierającą wynik operacji mnożenia lub pustą macierz gdy podane macierze miały nieodpowiedni rozmiar