C ++无法从错误中调试,但代码中没有错误

时间:2017-10-20 14:26:40

标签: c++ memory-leaks entity

我试图“删除”/杀死我的实体,如果它们超出“playzone”或至少是用户可见的内容。我没有得到任何错误,但当我在函数“killEdgeEntities”中尝试此代码示例并启动游戏时,Everything将已经死亡,就好像“if语句”直接执行一样。不,我不会在争论之外产生任何东西。例如,用户Ship在屏幕中间生成。

如果你们需要更多信息,请对其进行评论。

void Invaders::killEdgeEntities() {
EntityVector entities;
for (EntityVector::iterator j = mEntities.begin(); j != mEntities.end(); j++) {
    Entity *entity = *j;
    //  * Dödsgränser *
    // Vänster: 
    if (entity->getPosition().getX() < -20) {
        delete entity;
    }
    // Höger: 
    if (entity->getPosition().getX() > VGCDisplay::getWidth() + 20) {
        delete entity;
    }
    // Upp: 
    if (entity->getPosition().getY() < -80) {
        delete entity;
    }
    // Ner: 
    if (entity->getPosition().getY() >  VGCDisplay::getHeight() + 20) {
        delete entity;
    }

}
mEntities = entities;
}

2 个答案:

答案 0 :(得分:1)

不是一个真正的答案 - 因为你没有发布足够的代码让我们弄清楚发生了什么......但是你发布了足够的代码来查看问题。

if (entity->getPosition().getX() < -20) {
    delete entity;
}
// Höger: 
if (entity->getPosition().getX() > VGCDisplay::getWidth() + 20) {

当你的x&lt; -20你删除实体?你试图在下一行中访问它,现在它是一个浮动指针(即它没有指向有效的内存)......并且等待发生崩溃。

答案 1 :(得分:0)

这解决了我的问题,通过最后在实体上对EntityVector&#34;实体&#34;进行push_back的其他批处理。然后最后在for循环之后确保它们是内联的(我猜是平行的)。

void Invaders::killEdgeEntities() {

    EntityVector entities;
    for (EntityVector::iterator i = mEntities.begin(); i != mEntities.end(); i++) {
        Entity *entity = *i;
        //  * Dödsgränser *
        // Vänster: 
        if (entity->getPosition().getX() < -20) {
            delete entity;
        }
        // Höger: 
        else if (entity->getPosition().getX() > VGCDisplay::getWidth() + 20) {
            delete entity;
        }
        // Upp: 
        else if (entity->getPosition().getY() < -80) {
            delete entity;
        }
        // Ner: 
        else if (entity->getPosition().getY() > VGCDisplay::getHeight() + 20) {
            delete entity;
        }
        else {
            entities.push_back(entity);
        }
    }
    mEntities = entities;
}