如何用子函数的形式动态申请二维数组并调用(C语言)

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define m 3 /* row */
#define n 4 /* column */
void main()
{
int m,n,i,j;
int **s;
s=creat2d(m,n);

for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=i*2+j;
printf("s[%d][%d]=%d ",i,j,s[i][j]);
}
printf("\n");
}
}

int **creat2d(int m,int n)
{
int **a,k;
a=(int**)malloc(sizeof(int*)*n);
for(j=0;j<n;j++)
a[k]=(int*)malloc(sizeof(int*)*m);
return a;
for(i=0;i<n;i++)
free(a[i]);
free(a);
}

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define m 3   /* row */
#define n 4   /* column */
int **creat2d(int mm,int nn);//声明一下子函数
void main()
{
int i,j;
int **s;
s=creat2d(m,n);

for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
s[i][j]=i*2+j;//s当做二维数组使用
printf("s[%d][%d]=%d ",i,j,s[i][j]);
}
printf("\n");
}
for(i=0;i<m;i++)//先free掉m个行指针
{
free(s[i]);
s[i]=NULL;//free之后要置为null,防止野指针
}
free(s);
s=NULL;//防止野指针
}

int **creat2d(int mm,int nn)
{
int **a;
int j;
a=(int**)malloc(sizeof(int*)*mm);//mm个行
for(j=0;j<mm;j++)
a[j]=(int*)malloc(sizeof(int*)*nn);//每行nn个数
return a;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-06
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define m 3   /* row */
#define n 4   /* column */

int **creat2d() {
int **a,i;
a = (int **)malloc(sizeof(int *) * n);
for(i = 0; i < n; i++)
a[i] = (int *)malloc(sizeof(int) * m);
return a;
}

int main() {
int i,j;
int **s;
s = creat2d();
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
s[i][j] = i * 2 + j;
printf("s[%d][%d] = %d ",i,j,s[i][j]);
}
printf("\n");
}
for(i = 0; i < n; i++) free(s[i]);
free(s);
return 0;
}

相似回答