请高手帮忙,有关malloc函数
(这段代码看不懂也没关系,与代码本身关系不大)这段代码有两个自定义函数组成,sx(),sy(),还有一个主函数,自定义函数没问题,问题出现在函数调用,涉及二维数组动态分配内存malloc()函数,这是前几天一个帖子上的题,运行结果是(发不了图片)1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
自定义函数测试没问题,自定义函数用的是*p,但是主函数由于涉及二维数组动态分配内存,用的是int **p 二级指针,所以我的函数调用部分
sx(m,s);
sy(m,s);
就出问题了,这道题好不容易做出来了,在最后的时候出问题,很急啊,请各位高手帮忙,把我的函数调用修改一下。
程序代码:
#include<stdio.h> #include<malloc.h> void sx(int m,int *p) { int i,*q; for(i=0;i<m/2;i++) { int k=0; while(k<(m-2*i)) { *(p+m*i+i+k)=i+1; k++; }; k=0; while(i>0&&k<i) { *(p+m*i+k)=k+1; *(p+m*(i+1)-1-k)=k+1; k++; } } q=p+m*m-1; while(p<q) *q--=*p++; } void sy(int m,int *p) { int i,*q; for(i=0;i<(m+1)/2;i++) { int k=0; while(k<(m-2*i)) { *(p+m*i+i+k)=i+1; k++; }; k=0; while(i>0&&k<i) { *(p+m*i+k)=k+1; *(p+m*(i+1)-1-k)=k+1; k++; } } q=p+m*m-1; while(p+m<q) *q--=*p++; } void main() { int i,j,m; int **s; printf("输入矩阵边长\n"); scanf("%d",&m); s=(int**)malloc(sizeof(int*)*m); for(i=0;i<m;i++) s[i]=(int*)malloc(sizeof(*s)); if(m%2==0) sx(m,s); else sy(m,s); for(i=0;i<m;i++) { for(j=0;j<m;j++) printf("%d",s[i][j]); printf("\n"); } }
[ 本帖最后由 sanjianfei 于 2012-3-8 15:04 编辑 ]