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
相关产品推荐
相关产品推荐

