====== Dynamiczny przydział pamięci ===== ===== Funkcja malloc() i free() ===== #include void *malloc(size_t rozmiar); void free(void *wskaznik); void *realloc(void *wskaznik, size_t rozmiar); void *calloc(size_t ile, size_t rozmiar); [[http://pl.wikibooks.org/wiki/C/malloc|Dokładny opis powyższych funkcji na stornie Wikipedii]]\\ [[http://pl.wikibooks.org/wiki/C/Biblioteka_standardowa/Indeks_tematyczny#stdlib.h|Funkcje z biblioteki stdlib]] Przykład zastosowania funkcji malloc() #include #include 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 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