You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试错误:abort()被调用,stoi处执行中断,请求技术协助

针对你的stoi调用触发abort()问题的排查建议

Hey there! No worries about being a first-time poster—we’ve all fumbled through our first debug sessions, so don’t stress 😊

从你描述的情况来看,min = stoi(temp);触发abort(),大概率是因为temp的内容不符合stoi的要求,导致它抛出了未被捕获的异常。结合你说调试时发现该语句没读到值,先给你几个具体的排查方向:

  • 先确认temp的实际内容:
    你可以在调用stoi之前加一行打印代码,看看temp到底是什么:

    std::cout << "当前temp的值是:'" << temp << "'" << std::endl;
    

    如果输出是空字符串(也就是''),或者包含非数字字符(比如空格、字母、乱码符号),stoi就会抛出std::invalid_argument异常;如果数字超出了int的范围,会抛出std::out_of_range异常——只要这些异常没被捕获,程序就会直接调用abort()终止。

  • 检查temp的赋值逻辑:
    既然你和朋友的代码几乎一样,那重点看看temp是怎么来的——是不是从文件/输入流读取时出了问题?比如:

    • 读取前有没有残留的换行符或空白字符,导致getline或cin直接读了空内容?
    • 读取的文件路径是否正确?你的程序有没有权限访问目标文件?
    • 输入内容的格式和朋友的是否一致?比如朋友的输入文件对应位置是有效数字,而你的是空白或其他无效内容?
  • 给stoi加异常捕获,明确错误类型:
    你可以把stoi的调用包裹在try-catch块里,这样能看到具体的错误信息,方便精准定位:

    try {
        min = stoi(temp);
    } catch (const std::invalid_argument& e) {
        std::cerr << "错误:输入不是有效整数,temp的值是:'" << temp << "',错误信息:" << e.what() << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "错误:输入整数超出范围,temp的值是:'" << temp << "',错误信息:" << e.what() << std::endl;
    }
    
  • 对比你和朋友代码的细节差异:
    哪怕只是变量名不同,也有可能在读取逻辑的细节上有差异——比如朋友用了cin >> temp而你用了getline(cin, temp),或者处理输入空白的方式不一样?仔细对比输入读取的每一行代码,说不定能找到问题所在。

先试试上面的方法,把temp的实际内容搞清楚,应该就能找到问题根源啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:10:24