【发布时间】:2021-11-05 06:31:35
【问题描述】:
我想使用malloc 收集一个 3 维矩阵。还有矩阵打印部分,但我没有包括。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,k,m,n,o;
float ***A;
printf("Input dimension for matrix(m,n,o)\n");
printf("Enter m : ");
scanf("%d",&m);
printf("Enter n : ");
scanf("%d",&n);
printf("Enter o : ");
scanf("%d",&o);
A = (float***)malloc(o*sizeof(float**));
for(i=0;i<o;i++){
A[i] = (float**)malloc(m*sizeof(float*));
for(j=0;j<m;j++){
A[i][j] = (float*)malloc(n*sizeof(float));
}
}
for(i=0;i<o;i++){
for(j=0;j<m;j++){
for(k<0;k<n;k++){
printf("Input number for (%d,%d,%d) : ",j+1,k+1,i+1);
scanf("%f",&A[i][j][k]);
}
}
}
return 0;
}
在我完成输入 m,n,o 后程序似乎跳到最后,所以我无法输入任何矩阵值。我必须使用malloc,因为它是任务所必需的。
编辑:一切都是错误的。 m代表行,n代表列,o代表mXn矩阵的个数。
【问题讨论】:
-
第一个循环
for(i=0;i<n;i++)不应该是for(i=0;i<o;i++),因为你分配了o数组元素吗?以下也是。 -
您似乎对 malloc 和
for循环使用了不同的数字。例如。如果维度为 111,222,333,则分配 111 个 float**s,然后将 222 个指针放入该空间。 -
请不要让代码成为“移动目标”!
-
注意编译器警告。
scanf("%f",A[i][j][k])错了,应该是&A[i][j][k] -
下一个编译器警告是
for(k<0;k<m;k++)启用所有警告