【发布时间】:2016-07-20 16:04:45
【问题描述】:
`亲爱的朋友们, 我试图通过 malloc 使用虚拟变量 m 定义一个名为 A 的二维数组。变量 A 已初始化为 0。 预计在运行后会将新值分配给矩阵。但这不会发生在这里。我想了解这样做的正确方法。我还尝试了dynamic memory allocation in 2d array and using scanf 中描述的方法,也避免了强制转换 malloc。 这是代码
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
double** Allocate(int d1,int d2);
double** Allocate(int d1,int d2)
{
double **m;
int i,j;
m = (double**)malloc(sizeof(double*)*d1);
for(i=0;i<d1;i++)
{
m[i]=(double*)malloc(sizeof(double)*d2);
}
for(i=0;i<d1;i++)
{
for(j=0;j<d2;j++)
{
m[i][j]=0.0;
}
}
return m;
}
main()
{
int i,j;
int n=3;
float x[n],y[n];
double** A= Allocate(n,n);
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
scanf("%f",&A[i][j]);
}
}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
printf("%f\t",A[i][j]);
}printf("\n");
}
}
【问题讨论】:
-
不要转换
malloc的结果,也不要忘记检查NULL。 -
scanf("%f",&A[i][j]);使用%lffor double -->scanf("%lf",&A[i][j]); -
可能更好的方法是让 double Array[d1][d2]; 后跟 *double *ArrayPointer=malloc(d1*d2*sizeof(double)); * ,然后从那里继续。
-
@JonathonReinhart 在现代系统上,检查它的 null 保证没有什么特别的。
-
@n.m.需要详细说明吗?您是否建议我们停止检查
malloc的结果NULL?
标签: c