Ślad: • zajecia7 • zajecia8

Dynamiczny przydział pamięci

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.
Writing /home/grochu/public_html/wiki/data/cache/a/a34aa82282cc1fd1632cff675ab3493d.metadata failed
Writing /home/grochu/public_html/wiki/data/cache/a/a259c57424353ec11f3a001bad0d0429.i failed
Writing /home/grochu/public_html/wiki/data/cache/a/a259c57424353ec11f3a001bad0d0429.metadata failed

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.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

Struktura alokacji pamięci dla macierzy

Zadania domowe

  1. 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