Witam, mam do napisania taką funkcję:
struct matrix_t* matrix_create_struct(int width, int height);
Funkcja alokuje pamięć na strukturę typu matrix_t, a następnie na macierz o wymiarach width x height oraz ustawia odpowiednie wartości w pozostałych polach struktury - inicjuje strukturę matrix_t*.
Funkcja zwraca wartość NULL w przypadku kiedy nie udało się poprawnie utworzyć struktury lub wskaźnik do nowo utworzonej struktury.
W przyadku porażki cała zaalokowana pamięć powinna zostać zwolniona.
Funkcja napisana przeze mnie wygląda następująco:
struct matrix_t* matrix_create_struct(int width, int height){
if(width<=0||height<=0) return NULL;
struct matrix_t* m = (struct matrix_t*) malloc(sizeof(struct matrix_t));
if(m == NULL)
return NULL;
int i, j;
m->height=height;
m->width=width;
(m->ptr) = (int**) malloc(height * sizeof(int*));
if ((m->ptr) == NULL) {
free(m);
return NULL;
}
for (i = 0; i < height; i++) {
*((m->ptr)+i) = (int*) malloc(width * sizeof(int));
if (*((m->ptr)+i) == NULL) {
for (j =0; j<i; j++) {
free(*((m->ptr)+j));
}
free((m->ptr));
free(m);
return NULL;
}
}
return m;
}
W testach wyskakuje mi błąd o takiej treści:
Próba zwolnienia niezaalokowanego wcześniej bloku pamięci (nieznany wskaźnik)⏎
Nie do końca wiem, w którym momencie popełniam błąd i z czego to wynika. Byłabym wdzięczna za pomoc. Z góry dziękuję.