【发布时间】:2013-03-13 11:03:17
【问题描述】:
我正在使用 SDL 创建一个非常简单的 Pong 游戏。对于碰撞检测,我有一个名为 DetectCollision 的类,如下所示:
class DetectCollision {
public:
std::vector<Object*> objects;
int numOfObjects;
DetectCollision();
~DetectCollision();
void takeObjs(Object &);
void handleCollision();
};
所以发生的事情是 takeObjs(Object &) 函数获取 Object 类的一个对象并将其存储在一个向量中。 takeObjs(Object &) 看起来像这样:
void DetectCollision::takeObjs(Object &obj1){
objects.push_back(&obj1);
}
到目前为止一切正常。我可以访问向量“对象”来检测所有的碰撞,它工作正常,但是当我试图删除向量时问题就来了。如果我没记错的话,它是一个指针向量。所以我所做的删除它是在类析构函数中:
DetectCollision::~DetectCollision(){
for (unsigned int i = 0; i < objects.size(); ++i){
delete objects[i];
}
objects.clear();
}
根据使用 GCC 编译器的 Code::Blocks IDE,它在“delete objects[i];”上出现段错误线。它还会在程序的另一部分出现段错误,以尝试 SDL_FreeSurface() 类持有的皮肤,但我认为我可以很容易地修复它。这个向量是主要问题。如果您需要查看完整的源代码以帮助我了解如何解决问题,我可以提供。我非常感谢任何帮助。感谢和 DFTBA!
【问题讨论】:
标签: c++ class pointers vector segmentation-fault