generalnie program ma liczycc wyznacznik macierzy kwadratowej, kompiluje się ale nie można go odpalić bo ma jakiś problem ze zwalnianiem pamięci. dałby ktoś radę na to zerknąć?
#include <stdio.h>
#include <stdlib.h>
void clean(double **matrix, int n)
{
int i;
for(i = 0; i < n; i++)
{
free(matrix[i]);
}
free(matrix);
}
double** matrix_alloc(int n)
{
int i;
//alokacja odpowiedniej ilosci wierszy
double**matrixm=(double**)malloc(n*sizeof(double*));
if ( matrixm == NULL )
{
printf("blad przy alokacji pamieci ilosci wierszy");
return NULL;
}
for(i=0;i<n;++i)
{
matrixm[i]=(double*)malloc(n*sizeof(double));
if (matrixm[i]==NULL)
{
printf("blamprzy alokacji pamieci");
clean(matrixm,i);
return NULL;
}
}
return matrixm;
}
double det(double ** matrix, int n)
{
double** minor;
double sum=0.0;
double sign=1.0;
int i,k=0,l,j=0,a;
if(n==1) return matrix[0][0];
if(n==2) return matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0];
minor=matrix_alloc(n-1);
for(i=0;i<n;i++)
{
for(a=0;a<n;a++){
if(j!=a)
{
for(l=1;l<n;l++)
{
minor[k][l]=matrix[a][l];
k++;
}
}}
sum+=sign*matrix[0][i]*det(minor,n-1);
sign = -sign;
}
clean(minor,n-1);
return sum;
}
int main()
{
int n,i,j,k;
double l,wyzna;
FILE *f;
//otworzenie pliku
f=fopen("matrix.txt","r");
if(f==NULL)
{
printf("error");
return 1;
}
//odczytanie rozmiaru macierzy
fscanf(f,"%d",&n);
double** matrix=matrix_alloc(n);
if(matrix==NULL)
{
printf("problem z utworzeniem macierzy");
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
fscanf(f,"%lf",&matrix[i][j]);
//printf("%.2f ",l);
} //if(n)printf("\n");
}
// printf("%f",matrix[2][1]);
wyzna=det(matrix,n);
printf("%f",wyzna);
clean(matrix,n);
fclose(f);
return 0;}