Funkcja malloc
alokuje pamięć zaś funkcja free
pozwala zwolnić przydzieloną pamięć.
Funkcje te zadeklarowane są w pliku stdlib.h
#include <stdlib.h> void *malloc(size_t rozmiar); void free(void *wskaznik);
Funkcja malloc
alokuje pamięć o padanym rozmiarze (w bajtach). Np. tablica 100 liczb całkowitych potrzebuje sizeof(int)*100
bajtów.
Wartością zwracaną jest adres początku zaalokowanej pamięci, który należy zrzutować na wskaźnik do odpowiedniego typu.
int *x = (int*)malloc(100*sizeof(int));
Jeżeli operacja alokacji pamięci się nie powiodła zwracana jest wartość NULL
(adres 0)
Przykład
#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 }
Plik źródłowy: malloc.c
Napisz program, który posortuje liczby rzeczywiste umieszczone w pliku dane.txt
.
Plik może zawierać dowolną ilość liczb rzeczywistych oddzielonych białymi znakami. Liczby powinny zostać umieszczone w tablicy o takim rozmiarze aby pomieścić wszystkie liczby z pliku.
Dane: plik tekstowy dane.txt
Wynik: ciąg liczb w kolejności od najmniejszej do największej
Algorytm sortowania umieść w stosownej funkcji.
Zaimplementuj program, który wykona mnożenie dwóch macierzy. W tym celu zaimplementuj następujące funkcje:
utworz_macierz
- tworzy macierz o zadanych rozmiarach w
i k
określające ilość wierszy i ilość kolumn macierzy. Macierz tworzona jest dynamicznie wg. struktury podanej na poniższym rysunku. NULL
, gdy tworzenie macierzy się nie powiodłowczytaj_macierz
- wypełnia macierz wartościami podanymi przez użytkownika w
i k
oraz adres macierz do wypełnieniawyświetl_macierz
- wyświetla macierz na ekranie w
i k
oraz adres macierz m
zwolnij_macierz
- zwalnia pamięć zajętą przez macierz w
oraz adres macierzy m
iloczyn_macierzy
- wykonuje operację mnożenia dwóch macierzy o odpowiednich rozmiarach. w1
i k1
oraz adres macierzy pierwszej m1
oraz rozmiary i adres macierzy drugiej w2
, k2
, m2
w1
na k2
stanowiącej iloczyn macierzy pierwszej i drugiej lub wartość NULL
, gdy nie udało się pomnozyc macierzy (np. niezgodne wymiary lub bład alokacji pamięci) Struktura alokacji pamięci dla macierzy
qsort
z biblioteki stdlib.h
lub zaimplementuj własną wersję algorytmu Quick sort