【发布时间】:2021-01-11 23:04:36
【问题描述】:
我正在尝试创建一个函数,该函数在给定变量名称和行数和列数(在本例中为 n)的情况下初始化随机二维方阵。此代码返回“分段错误”错误,我不知道为什么。我尝试在函数 initM 中的 if-else 中使用 &,但随后返回“错误:需要左值作为赋值的左操作数”有人知道如何使其工作吗?
void initM (int n, int **matrix){
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
if (i == j) matrix[i][j] = 101;
else matrix[i][j] = (rand() % 101);
}
}
}
void main (int argc, char *argv[]){
int n = atoi(argv[1]);
int **matrix = (int **)malloc(n*sizeof(int));
for(int i = 0; i < n; i++) matrix[i] = (int *)malloc(n*sizeof(int));
initM(n, matrix);
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
printf("%d ", matrix[i][j]);
}
printf("\n");
}
for (int i = 0; i < n; i++) free(matrix[i]);
free(matrix);
}
【问题讨论】:
-
int **matrix = (int **)malloc(n*sizeof(int));-->int **matrix = malloc(n*sizeof(int *));通知指向int的指针的大小,并且没有强制转换。 -
见上面的评论。如果指针大于系统上的整数(这很可能),那么您没有为指针数组分配足够的空间,因为您在需要
sizeof(int *)的地方使用sizeof(int)。 -
亲爱的 Op,欢迎来到 S.O.考虑使用 `` 而不是
""来显示代码 AND 错误消息 ...
标签: arrays c function multidimensional-array