酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

不使用 vector 实现矩阵列交换及错误处理

错误码 11 通常表示段错误(Segmentation fault),这往往是因为程序试图访问未被分配给它的内存区域。在你这个不使用`vector`的代码里,可能是因为矩阵的行数和列数超出了`MAX_SIZE` 所定义的范围,造成了内存越界访问。 下面是优化后的代码,会在输入行数和列数时检查是否超出最大范围,避免内存越界问题: ```cpp #include <iostream> using namespace std; const int MAX_SIZE = 1000; // 定义矩阵的最大尺寸 int main() { int r, c; // 输入矩阵的行数和列数 cin >> r >> c; // 检查输入的行数和列数是否超出最大范围 if (r > MAX_SIZE || c > MAX_SIZE) { cerr << "输入的矩阵尺寸超出最大范围!" << endl; return 1; } // 定义二维数组来存储矩阵 int matrix[MAX_SIZE][MAX_SIZE]; // 输入矩阵的元素 for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { cin >> matrix[i][j]; } } int x, y; // 输入要交换的两列的列号 cin >> x >> y; // 检查列号是否合法 if (x < 1 || x > c || y < 1 || y > c) { cerr << "输入的列号不合法!" << endl; return 1; } // 交换第 x 列和第 y 列 for (int i = 0; i < r; ++i) { int temp = matrix[i][x - 1]; matrix[i][x - 1] = matrix[i][y - 1]; matrix[i][y - 1] = temp; } // 输出交换后的矩阵 for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { if (j > 0) { cout << " "; } cout << matrix[i][j]; } cout << endl; } return 0; } ``` ### 代码解释: - **范围检查**:在读取行数和列数之后,检查它们是否超出了`MAX_SIZE`,若超出则输出错误信息并终止程序。 - **列号合法性检查**:读取要交换的列号后,检查列号是否在合法范围内(1 到`c`之间),若不合法则输出错误信息并终止程序。 这样可以避免因输入不合法而导致的内存访问错误。 ######[AI问答 | 676点数解答 | 2026-04-25 20:24:35]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]