C++数组最大值查找程序异常:输入5元素返回16而非9求助
问题排查与修复
核心bug:数组越界访问
你的第二个循环条件写错了:
for (int i = 1; i <= n; i++) {
数组下标从0开始,arr的有效下标范围是0到n-1。当i = n时,arr[i]访问的是数组末尾之外的内存区域,这里存储的是随机垃圾值(你看到的16就是这种垃圾数据)。
把循环条件改成i < n即可:
for (int i = 1; i < n; i++) {
额外的非标准写法问题
int arr[n];属于变长数组(VLA),这是C99的特性,C标准并未定义这种写法,虽然部分编译器(如GCC)会作为扩展支持,但为了保证代码的可移植性,建议改用标准C的写法:
- 方法1:使用
std::vector(推荐)
#include<iostream> #include<vector> using namespace std; int main() { int n; cin >> n; vector<int> arr(n); for (int i = 0; i < n; i++) { cin >> arr[i]; } int max_value = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > max_value) { max_value = arr[i]; } } cout << max_value; return 0; }
- 方法2:动态分配数组
int* arr = new int[n]; // 使用完记得释放内存 delete[] arr;
内容的提问来源于stack exchange,提问作者Avry G.
相关产品推荐
相关产品推荐

