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

C++使用SFML生成超过6个圆形时报Vector Subscript Out of Range错误如何解决

问题根因

你的代码触发下标越界的核心原因是std::vector初始化参数传错:
你定义的size是圆形的半径(值为5),但你初始化存储圆形的vector时,把size作为了vector的初始长度参数:

std::vector<sf::CircleShape> person(size);

这行代码执行后,person vector里只会有5个sf::CircleShape元素,当你后续循环访问i >=5的下标时,就属于访问vector未分配的空间,触发越界报错。
你之前设置生成数量<=6时能正常运行,只是未定义行为的偶然表现:部分编译器实现vector时会默认多预留少量栈空间,所以刚好能多撑1-2次访问,但这是完全不可靠的,随时会崩溃。


修复方案

只需要把vector初始化的参数改为你实际需要生成的圆形数量numPeople即可:

// 错误写法
// std::vector<sf::CircleShape> person(size);
// 正确写法
std::vector<sf::CircleShape> person(numPeople);

额外优化建议

你代码中设置颜色的逻辑存在冗余,不管status判断结果是什么,最后都会重新把圆形颜色设为绿色,前面的判断逻辑可以直接删除,简化代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:54:02