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 nazwiemacierz
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
typufloat
*
*
(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
imacierz.c
zadeklaruj i zdefiniuj następujące funkcje:utwórz_macierz
- argumentami funkcji są rozmiary macierzy (ilość wierszy i kolumn). Wartością zwracaną jest strukturamacierz
(zobacz punkt wyżej) posiadająca polewsp
zawierające adres do dynamicznie utworzonej macierzy typufloat
(tablica zawierająca wskaźniki typufloat
) lubNULL
gdy tworzenie macierzy się nie powiodłowczytaj_macierz
- dla danej w argumencie macierzy wczytuje ze standardowego wejścia (z klawiatury) wszystkie elementywyświetl_macierz
- wyświetla na standardowym wyjściu (na ekranie) zawartość podanej w argumencie macierzyzwolnij_macierz
- zwalnia pamięć zajętą przez macierzdodaj_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