c程序求行列式的值的问题?

[code="c"]
#include
#include
#include

/*a为行列式,n为行列式的阶*/
int f(int **a,int n)
{
int i,j,k;
int len;/*子行列式的阶*/
int s=0;

len = n-1;

/*按照定义,初始化一个子行列式数组的空间*/
int **p = (int **)malloc(sizeof(int *)*len);
for(i=0;i<len;i++)
    *(p+i) = (int *)malloc(len);

/*阶为2,按照定义计算*/
if( 2==n ) 
    return a[0][0]*a[1][1]-a[1][0]*a[0][1];

for( k=0; k<n; k++)
{
    for(i=0;i<len;i++)
        for(j=0;j<len;j++)
        {
            if(i<k)
                *(*(p+i)+j) = a[k][j+1];/*初始化子行列式的值*/
            if(i>k)
                *(*(p+i)+j) = a[k+1][j+1];
        }
    s += (int)pow(-1,i+j) * f(p,len);/*递归计算*/
}

free(p);
return s;

}

void main()
{
int a[3][3] = {1,2,4,5,7,9,12,11,8};
int **p = a;
printf("%d",f(p,3));
}
[/code]
[b][size=large]思路很清楚,就是按照定义求值,但调试总是出错,请大家指点下[/size][/b]
[b]问题补充:[/b]
一楼的童鞋,这里是二维数组,我想要体现维度
[b]问题补充:[/b]
主要是要调试成功,并且有结果

自己看吧:
[code="c"]#include
#include
#include

/*a为行列式,n为行列式的阶*/
int f(int **a,int n)
{
int i,j,k;
int len;/*子行列式的阶*/
int s=0;

len = n-1;

/*按照定义,初始化一个子行列式数组的空间*/
int **p = (int **)malloc(sizeof(int *)*len);
for(i=0;i<len;i++)
    p[i] = (int *)malloc(sizeof(int)*len);

/*阶为1,按照定义计算*/
if( 1==n ) 
    return a[0][0];

for( k=0; k<n; k++)
{
    for(i=0;i<len;i++)
        for(j=0;j<len;j++)
        {
            if(i<k)
                p[i][j] = a[i][j+1];/*初始化子行列式的值*/
            if(i>=k)
                p[i][j] = a[i+1][j+1];
        }
    s += (int)pow(-1,k) * a[k][0]* f(p,len);/*递归计算*/
}
for(i=0;i<len;i++) free(*(p+i));
free(p);
return s;

}

int main()
{
int i;
int a[3][3] = {1,2,4,5,7,9,12,11,8};
int **p = (int **)malloc(sizeof(int *)*3);
for(i=0;i<3;i++) p[i] = a[i];
printf("%d",f(p,3));
free(p);
}
[/code]

第十五行:
[code="c"]int **p = (int **)malloc(sizeof(int *)*len*len); [/code]

这样可以吗?