Mam oto taki kod:

 #include<stdio.h>
#include<stdlib.h>
#include<conio.h>

/*
Obliczanie wyznacznika metodą rozwinięć Laplace
*/

double det(double**, int);
double odwr(double**, int);

int main(){
int i,j,n;
double** a;
char ch;
do{
printf("Podaj n=");
scanf("%d",&n);
a=(double**)malloc((n+1)*sizeof(double));
for(i=0;i<n+1;i++)
a[i]=(double*)malloc((n+1)*sizeof(double));
for(i=0;i<n;i++){
    for(j=0;j<n;j++){
      printf("A[%d][%d]=",i+1,j+1);
      scanf("%lf",&a[i][j]);
    }
printf("\n");
}
printf("det(A)=%lf\n",det(a,n));
odwr(a,n);
for(i=0;i<n+1;i++)
free(a[i]);
free(a);
ch=getch();
} while(ch!=27);
return 0;
}

double det(double** a, int size)
{
   int i, k, l, z = 1;
   double** b;
   double d = 0;
   b=(double**)malloc((size+1)*sizeof(double));
   for(i=0;i<size+1;i++)
   b[i]=(double*)malloc((size+1)*sizeof(double));
   if (size == 1)
      d = a[0][0];
   else
   {
      // rozwiniecie Laplace'a względem pierwszego wiersza
      for (i = 0; i < size; i++)
      {
         // przepisywanie wierszy
         for (k = 0; k < size - 1; k++)
         {
            // przepisywanie kolumn
             for (l = 0; l < size - 1; l++)
            {
                  // przepisanie komórki znajdującej się w tej
                  // samej kolumnie lecz w wierszu poniżej
               if (l < i)  b[k][l] = a[k + 1][l];
                  // przepisanie komórki znajdującej się
                  // w następnej kolumnie i wierszu poniżej
               else  b[k][l]=a[k + 1][l + 1];
            }
         }
         // wywołanie rekurencyjne
         d = d + z * a[0][i] * det(b, size-1);
         // zmiana znaku
         z = -z;
      }
   }
   for(i=0;i<size+1;i++)
   free(b[i]);
   free(b);
   return d;
}

double odwr(double** a, int size)
{
	int i, j, k;
	double** b;
	   double d = 0;
   b=(double**)malloc((size+1)*sizeof(double));
   for(i=0;i<size+1;i++)
   b[i]=(double*)malloc((size+1)*sizeof(double));
   if (size == 1)
      d = a[0][0];
   else
   {
                    /*Transponowanie macierzy*/
                    printf("TRANSPONOWANIE MACIERZY:\n\n");
                    for(i=0;i<size-1;i++)
                                    {
                                    for(j=i+1;j<size;j++){
                                    k=a[i][j];
                                    a[i][j]=a[j][i];
                                    a[j][i]=k;
                                    for (i=0; i<size; i++) 
                                     { 
                                        for(j=0; j<size; j++) 
                                         { 
                                         printf("[%d]", a[j][i]);
                                        }
                                               printf("\n");
                                               } 
                                               }         
             }
    /*Odwracanie macierzy*/
    printf("MACIERZ ODWROTNA:\n\n");         
             for(j=0;j<size;j++)
  {
      for(i=0;i<size;i++) 
      {
                       
       d=((1/(det(a,size)))*(a[j][i]));
                       for (i=0; i<size; i++) 
                       { 
                       for(j=0;j<size;j++) 
                       {
                       printf("[%0.2f]", d);
                       }
                       printf("\n");
                       }
}
}  
}
   for(i=0;i<size+1;i++)
   free(b[i]);
   free(b);
   return d;
}

Prawidłowo liczy wyznacznik metodą laplace'a, jednak błednie wykonuje proces odwracania macierzy. Czy ktoś może widzi błedy? Brakuje też tego warunku, że dla wyznacznika równego 0 ma nie liczyć macierzy odwrotnej.