【发布时间】:2014-12-10 04:57:19
【问题描述】:
好的,我无法理解如何在 calloc 中使用 malloc 来初始化数组。我试图通过创建一个存储用户输入值的 2 * 3 矩阵来做一些练习。我不想更改的唯一部分代码是使用 **matrix 而不是 matrix[5][7]。有什么建议吗?
到目前为止,这是我的代码(我不断收到分段错误):
#include<stdio.h>
#include<stdlib.h>
main(){
int i, j;
int **mat = (int **)malloc(2 * 3 * sizeof(int*));
for(i=0;i<2;i++)
for(j=0;j<3;j++){
printf("Input a value for Array[%d][%d]: ",i,j);
scanf("%d",&mat[i][j]);
}
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d\t",mat[i][j]);
}
编辑:感谢大家的帮助!我的代码现在可以正常工作。这是它的样子:
#include<stdio.h>
#include<stdlib.h>
main(){
int i, j;
int **mat;
mat = malloc(2 *sizeof(int *));
for(i=0;i<2;i++){
mat[i] = malloc(3 *sizeof(int));
for(j=0;j<3;j++){
printf("Input a value for Array[%d][%d]: ",i,j);
scanf("%d",&mat[i][j]);
}
}
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d\t",mat[i][j]);
return 0;
}
如果有任何理由我应该进行更多修改,请告诉我。
【问题讨论】:
-
不要使用隐式
int返回类型。另外,Don't cast the result of malloc (and friends). -
你的代码现在看起来不错
-
@Laura Kent 看看我的回答。它会对你有用。:)
-
看“相关”,有数百个线程用于如何 malloc 二维数组。
-
程序的编辑版本还有一个问题。 'int main(void)' 行将导致编译器(启用所有警告)抱怨。该行应该是:'int main()'
标签: c matrix malloc multidimensional-array