You need to enable JavaScript to run this app. C++查找n个数字最大值时出现运行错误的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

C++查找n个数字最大值时出现运行错误的解决方法

运行错误的根因定位与修复

首先明确:你把报错原因误判为时间超限是完全不对的。你写的求最大值逻辑是单次线性遍历,时间复杂度为O(n),哪怕处理十万级别的输入规模也根本不会触发超时限制。现在程序刚启动就因为非法内存访问直接崩溃,评测机拿不到正常输出,才会报运行错误。

逐处排查的错误

  • 无效头文件依赖
    代码里引入的curses.h是用于终端文本UI开发的第三方库,几乎所有在线评测平台都不会预装这个库,这行代码会直接导致编译失败,和求最大值的功能没有任何关系,直接删除即可。
  • 内存申请逻辑错误(核心崩溃原因)
    new int(n)和new int[n]是完全不同的语法:前者是申请单个int变量,用n的值初始化这个变量,仅占用4字节内存;后者才是申请长度为n的int数组。你当前的代码只申请了1个int的空间,后续循环要连续读写n个int的位置,远远超出了申请的内存边界,操作系统会直接判定程序非法访问内存,强制终止运行。
  • 数组下标越界
    C++数组下标从0开始计数,你写的循环从i=1开始存储输入值,既没有正确给数组第一个元素赋值,当i走到n的位置时,还会访问数组最后一个元素后面的相邻内存,进一步触发崩溃。正确的循环范围应该是从i=0到i < n,覆盖数组全部有效下标。
  • 内存泄漏风险
    用new申请的数组没有对应的delete[]释放,虽然在线评测环境会在程序退出时自动回收所有内存,但这是不规范的写法,很容易在长期运行的程序里造成内存泄漏。

修正后的可正常提交代码

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    // 正确申请长度为n的int数组
    int *p = new int[n];

    // 从下标0开始遍历存储输入,避免越界
    for(int i = 0; i < n; i++){
        cin >> p[i];
    }

    int largest = p[0];
    // 从第二个元素开始遍历比对最大值
    for(int i = 1; i < n; i++){
        if(largest < p[i])
            largest = p[i];
    } 

    cout << largest;
    // 匹配释放申请的数组内存
    delete[] p;
    return 0;
}

新手更推荐用标准库的vector存储输入数据,不需要手动申请释放内存,从根源上避免内存越界、泄漏的问题。实现思路和现在的逻辑完全一致,代码会更简洁。

内容的提问来源于stack exchange,提问作者James。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 05:54:07