回复 4楼 吹水佬
这种的话就只释放主函数,形参就不用释放把,没有在函数里面开辟空间。这个程序还运行不了,麻烦帮我看看问题处在哪里
#include<stdio.h>
#include<stdlib.h>
void mag(int **p, int n)
{
int i, j, k;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
p[i][j]=0;
j=n/2+1;
p[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1) i=n;
if(j>n) j=1;
}
if(p[i][j]==0)
p[i][j]=k;
else
{
i=i+2;
j=j-1;
p[i][j]=k;
}
}
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
printf("%d ", p[i][j]);
if(j==n)
printf("\n");
}
}
int main()
{
int **p, i, n;
while(1)
{
printf("输入N,打印出N*N的魔方阵\n");
scanf("%d",&n);
p=(int **)malloc(n* sizeof(int *));
for(i=0; i<n; i++)
*(p+i)=(int *)malloc(n* sizeof(int));
mag(p,n);
free(p);
for(i=0;i<n;i++)
free(p[i]);
}
return 0;
}