不使用 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]
- 解决 C++ 代码 “vector 未声明” 等错误:实现字符串单词反转功能(字节豆包 | 489点数解答 | 2025-11-12 14:49:29)83
- 修复代码:让含随机元素的 Win32 游戏界面代码正常运行(GPT | 2686点数解答 | 2024-10-31 15:01:39)381
- C++ 代码:巧妙计算 n×n 矩阵行、列、对角线平行直线元素和最大值(字节豆包 | 1151点数解答 | 2025-11-26 20:07:49)45
- C++ 简单方块世界玩家移动代码:分析、优化与注意事项揭秘(字节豆包 | 881点数解答 | 2025-12-20 19:47:37)56
- C++游戏代码中枚举类型定义报错原因及解决方案(字节豆包 | 371点数解答 | 2026-02-27 20:29:12)31
- C++实现不使用vector交换矩阵指定两列(字节豆包 | 556点数解答 | 2026-04-25 20:21:57)4
- 优化C++代码:利用前缀和计算数组区间和(字节豆包 | 466点数解答 | 2026-04-08 21:23:04)24
- JSP 实现商品展示模块:分页、搜索、交互与美观界面全搞定!(字节豆包 | 19点数解答 | 2024-12-13 15:00:43)353
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)368
- C++ 实现:轻松找出 n 个整数中的第二小值(字节豆包 | 260点数解答 | 2026-02-07 21:19:29)39
- C++实现找出数组中第二小的值(字节豆包 | 526点数解答 | 2026-03-27 19:40:26)21
- 找出数组中第二小值的C++代码实现(字节豆包 | 696点数解答 | 2026-03-28 19:40:41)17