矩阵程序中for循环运行异常的问题排查与修复请求
修复矩阵程序中循环迭代异常与数组越界问题
问题根源
你的代码核心错误在于循环内的三维数组声明完全错误:
int x[m][row[m]][column[m]];
当第一次循环m=0时,这个数组的第一个维度是0,直接导致内存布局混乱。后续通过scanf写入数组元素时,会越界覆盖到其他变量的内存(比如column[m]的值),这就是为什么你设置了2列,最终却变成3列的原因。
另外,你其实不需要用三维数组存储单个矩阵——每个矩阵是独立的二维结构,用二维数组处理即可。
修复后的代码
#include <stdio.h> int main() { int matrix; printf("ENTER NUMBER OF MATRICES\n"); scanf("%d", &matrix); int row[matrix], column[matrix]; for (int m = 0; m < matrix; m++) { printf("ENTER NUMBER OF ROWS IN %d MATRICE\n", m + 1); scanf("%d", &row[m]); printf("ENTER NUMBER OF COLUMNS IN %d MATRICE\n", m + 1); scanf("%d", &column[m]); // 用二维数组存储当前矩阵,匹配行列维度 int x[row[m]][column[m]]; int g = 1; printf("ENTER ALL ELEMENT LEFT TO RIGHT\n"); for (int j = 0; j < row[m]; j++) { for (int u = 0; u < column[m]; u++) { printf("%d\n", g); scanf("%d", &x[j][u]); g++; } } // 打印矩阵 for (int k = 0; k < row[m]; k++) { printf("|"); for (int l = 0; l < column[m]; l++) { printf("%d", x[k][l]); if (l < column[m] - 1) { printf(" "); } } printf("|\n"); } } return 0; }
修改说明
- 移除错误的三维数组声明,替换为当前矩阵对应的二维数组
int x[row[m]][column[m]],彻底避免内存越界覆盖变量的问题。 - 移除了多余的
getchar():scanf("%d")会自动跳过输入中的空白字符(包括换行、空格),手动清理缓冲区反而可能引发输入异常。 - 修正数组访问索引:将
x[m][j][u]改为x[j][u],符合二维矩阵的访问逻辑。
测试效果
输入1个1行2列的矩阵时,程序会正确请求2个元素,最终输出|3 4|,与预期完全一致。
内容的提问来源于stack exchange,提问作者vatsal
相关产品推荐
相关产品推荐

