ehm.. era un loop infinito risolto
questo è il codice definitivo, funziona, se a qualcuno serve...
occhio che non controlla se i calloc vanno a buon fine
codice:
double Determinante(double **Matrix, int Order) {
  if (Order==2) return (Matrix[0][0]*Matrix[1][1]-Matrix[0][1]*Matrix[1][0]);
  else {
    int cx,cy,cz,xz,sign=1;
    double **Compl=(double **)calloc(Order-1,sizeof(double *));
    for (cx=0; cx<Order-1; cx++) *(Compl+cx)=(double *)calloc(Order-1,sizeof(double));
    double Res=0;
    for (cx=0; cx<Order; cx++,sign=-sign) {
      for (cy=0,xz=0; cy<Order-1;xz++)
        if (xz!=cx) {
	  for (cz=0; cz<Order-1; cz++) Compl[cy][cz]=Matrix[xz][cz+1];
	  cy++;
	  }
      Res+=Matrix[cx][0]*Determinante(Compl, Order-1)*(double) sign;
      }
    free(Compl);
    return Res;
    }
  }