- 论坛徽章:
- 0
|
我在Debian下运行了如下的建立二维动态数组的c源程序,没有什么问题,至少我用gcc -o 2 2.c运行后是正确的。源程序如下(或者见附件):
#include<stdio.h>
#include<stdlib.h>
void frarray(int **a, int m){ //释放二维矩阵所占用的内存,m表示矩阵的行数
int i;
for(i=0;i<m;i++){
free(a[i]);
}
free(a);
}
int **mkarray(int m,int n){ //创建mxn的整型矩阵
int **a,i;
a=(int **)malloc(sizeof(int *)*m);
for(i=0;i<m;i++){
a[i]=(int *)malloc(sizeof(int)*n);
}
return a; //这里把创建好的矩阵返回
//frarray(a,m); //我不清楚是否应该在这里进行内存释放?
}
int **iparray(int **a, int m, int n){ //为mxn矩阵赋值
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
a[i][j]=i+j;
}
}
return a;
}
void prarray(int **a, int m, int n){ //打印mxn矩阵
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
}
void main(void){
int m,n,**a;
m=7;
n=8;
a=mkarray(m,n); //创建mxn数组,没有赋值
a=iparray(a,m,n); //为数组赋值
prarray(a,m,n); //显示数组
frarray(a,m); //释放所分配的内存空间,在这里释放对吗?
}
我现在的问题是:
(1) 第48行中释放内存的方法正确否?
(2)可否在第18行处释放内存,或者说该不该在那里就释放内存(毕竟已经把创建好的矩阵返回了)?
谢谢! |
|