Writing /home/grochu/public_html/wiki/data/cache/a/a34aa82282cc1fd1632cff675ab3493d.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
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 }
Zadania
- W plikach
macierz.himacierz.czadeklaruj i zdefiniuj następujące funkcje:utwórz_macierz- argumentami funkcji są rozmiary macierzy, wartością zwracaną jest adres (wskaźnik) dynamicznie utworzonej macierzy typufloat(tablica zawierająca wskaźniki typufloat) lubNULLgdy tworzenie macierzy się nie powiodłowczytaj_macierz- wstawia do macierzy (argumentami mają być wymiary macierzy oraz odpowiedni wskaźnik do macierzy) wartości wczytane z klawiaturywyświetl_macierz- wyświetla zawartość macierzy na ekraniezwolnij_macierz- zwalnia pamięć zajętą przez macierzdodaj_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
Struktura alokacji pamięci dla 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śćNULLgdy podane macierze miały nieodpowiedni rozmiar
