Witam,
Kończę program - kalkulator macierzy. Mam problem. Co robię nie tak w zwalnianiu pamięci w funkcji inverseMatrix?
mtrx inverseMatrix(float **matrix, int n) {
mtrx resultMatrix;
int i, j;
float det = 1 / calcDeterminant(matrix, n); //oblicz wyznacznik macierzy
float *temp = malloc((n - 1)*(n - 1)*sizeof(float)); //alokacja pamieci
float **minor = malloc((n - 1)*sizeof(float));
resultMatrix = initializeMatrix(n, n);
for (i = 0; i < n - 1; i++)
minor[i] = temp + (i*(n - 1));
for (j = 0; j < n; j++) {
for (i = 0; i < n; i++) {
//oblicz dopelnienie algebraiczne z matrix(j,i)
getMinor(matrix, minor, j, i, n);
resultMatrix.array[i][j] = det*calcDeterminant(minor, n - 1);
if ((i + j) % 2 == 1)
resultMatrix.array[i][j] = -resultMatrix.array[i][j]; //*(-1)^i+j
}
}
free(temp); //zwolnienie pamieci
for (i = 0; i < n - 1; i++) { //bez tej pętli są wycieki pamięci
free(minor[i]); //zwolnienie pamieci - TUTAJ BŁĄD: PROGRAM.EXE HAS TRIGGERED A BREAKPOINT
}
free(minor);
return resultMatrix;
}
//typ mtrx mam zdefiniowany tak:
//typ strukturalny macierzy
typedef struct {
int rows, columns; //liczba wierszy i kolumn
float **array; //tablica dwuwymiarowa dynamiczna
} mtrx;
Oto kod funkcji getMinor i calcDeterminant (obie są poprawne i nie tworzą wycieków pamięci; podobnie jak initializeMatrix i destroyMatrix, odpalane po wyjściu z podglądu wyniku - kiedy to resultMatrix jest kasowana): http://pastebin.com/jHTjCLbb
Z góry wielkie dzięki za pomoc. Męczę się z tym już długo i nie wiem, co robię źle...