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

ZyBooks判题报Range error但VS Code运行正常的C++程序问题

报错原因分析及解决说明

报错根本原因

你本地测试正常是因为所用的coordinates.txt刚好有5个坐标点,完全匹配代码里硬编码的循环上限j < 5,但ZyBooks判题系统会使用多组不同的测试用例,当测试用例中的坐标点数量不等于5时:

  • 如果点数量少于5,访问v1[j]就会出现下标越界,直接触发范围错误
  • 另外C++中vector的size()方法返回的是size_t(无符号长整型),用有符号的int类型变量和它比较,部分严格的编译环境会触发类型不匹配的报错或警告

修改后代码生效的原因

你修改后的代码解决了两个核心问题:

  • 将循环上限从硬编码的5改为v1.size(),遍历逻辑会匹配传入的Point向量的实际长度,不管测试用例有多少个坐标点都不会出现越界访问
  • 将循环变量i、j的类型改为long unsigned int,和size()返回的类型匹配,避免了类型不匹配的问题

额外优化建议

目前main函数里还存在两处硬编码逻辑,建议同步修改避免后续判题出错:

  1. 读取坐标点的循环不要写死i < 5,改为自动读到文件结束:
while (ifs >> p) {
    originalPoints.push_back(p);
}
int n = originalPoints.size();
  1. 输出矩阵的循环不要写死j < 5,改为匹配矩阵的实际列数:
for (int i = 0; i < matrix.size(); i++) {
    for (int j = 0; j < matrix[i].size(); j++) {
        ofs << matrix[i][j] << " ";
    }
    ofs << endl;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:03