So I am new at C, and I am having trouble passing an NxN array to my determinant function. Can someone have a look at my code and tell me where i went wrong. trying to pass nxn array to 2d pointer.

Code:

/*Hrach Beglaryan
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double Determinant(double **a,int n)
{
double **b= NULL;
double det = 0;
int i,j,k,p;
if (n < 1) { //doesnt make sense
} else if (n == 1) { //determinant is itself
det = a[0][0];
} else if (n == 2) {
det = a[0][0]*a[1][1]-a[1][0]*a[0][1];
} else {
det = 0;
for (k=0;k<n;k++) {
b = malloc((n-1)*sizeof(double *));
for (i=0;i<n-1;i++)
b[i] = malloc((n-1)*sizeof(double));
for (i=1;i<n;i++) {
p = 0;
for (j=0;j<n;j++) {
if (j == k)
continue;
b[i-1][p] = a[i][j];
p++;
}
}
det += pow(-1.0,1.0+k+1.0) * a[0][k] * Determinant(b,n-1);
for (i=0;i<n-1;i++)
free(b[i]);
free(b);
}
}
return(det);
}
void Transpose(double **a,int n)
{
int i,j;
int x,y;
double z; //temporary allocation
for (i=1;i<n;i++) {
for (j=0;j<i;j++) {
z = a[i][j];
a[i][j] = a[j][i];
a[j][i] = z;
}
}
for(x=0;x<n;x++)
for(y=0;y<n;y++)
printf("%d",a[x][y]);
}
int main()
{
int n=0;
int i=0,j=0;
double **c;
double a[n][n];
int x=0,y=0;
double determinant;
printf( "\n///////////////////////////////////////////////////////////\n");
printf( " FUN WITH LINEAR ALGEBRA\n");
printf("/////////////////////////////////////////////////////////////");
printf("\nPlease Enter the dimension of the square matrix");
scanf("%d",&n);
printf( "Please enter elements of the matrix");
{
for(x=0;x<n;++x)
for(y=0;y<n;++y)
{
printf("\nPlease enter the [%d][%d] element",x,y);
scanf("%d",&a[x][y]);
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(x=0;x<n;x++)
for(y=0;y<n;y++)
c[i][j]=a[x][y]; //I get a segmentation fault here. I understand that it only lets me put my first element [0][0].
determinant=Determinant(c,n);
printf("The Determinant of the matix is ", determinant);
Transpose(c,n);
}