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

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

utwórz_macierz - argumentami funkcji są rozmiary macierzy, wartością zwracaną jest adres (wskaźnik) dynamicznie utworzonej macierzy typu float (tablica zawierająca wskaźniki typu float) lub NULL gdy tworzenie macierzy się nie powiodło

wczytaj_macierz - wstawia do macierzy (argumentami mają być wymiary macierzy oraz odpowiedni wskaźnik do macierzy) wartości wczytane z klawiatury

wyświetl_macierz - wyświetla zawartość macierzy na ekranie

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

dodaj_macierze - wykonuje operację dodawania dwóch macierzy (o odpowiednich rozmiarach). Wartością zwracaną jest adres (wskaźnik) nowej macierzy zawierającej rezultat dodawania

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 adres macierzy zawierającej wynik operacji mnożenia lub wartość NULL gdy podane macierze miały nieodpowiedni rozmiar

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)