此代码是segfaulting,我无法弄清楚原因。当我使用gdb时,它会在函数末尾(大括号)中出现段错误。所以这并没有真正给我提供有关正在发生的事情的大量信息。这是代码,如果需要,我会提供额外的信息。
typedef std::list<Ground> l_Ground;
void Player::y_collisions(l_Ground grounds) {
for (l_Ground::const_iterator ent = grounds.begin(); ent != grounds.end(); ent++) {
if (getGlobalBounds().intersects(ent->getGlobalBounds())) {
in_air = false;
velocity -= gravity;
}
}
}
编辑:经过仔细检查,它可能是在for循环结束时的segfaulting。由于for循环的编写方式,这仍然没有意义。它不应该超出列表的末尾。
EDIT2:由于以下答案,这将有效。
typedef std::list<Ground> l_Ground;
void Player::y_collisions(const l_Ground& grounds) {
for (l_Ground::const_iterator ent = grounds.begin(); ent != grounds.end(); ent++) {
if (getGlobalBounds().intersects(ent->getGlobalBounds())) {
in_air = false;
velocity -= gravity;
}
}
}
答案 0 :(得分:2)
您按值传递了grounds
参数。这意味着制作了一份清单副本。 显然,您的Ground
类具有损坏的复制构造函数,这会使getGlobalBounds()
方法引用一些无效指针,从而导致崩溃。
除非想要立即复制它,否则你几乎不应该通过值传递大对象。始终训练自己始终键入const &
:.