【发布时间】:2012-09-29 08:17:07
【问题描述】:
我有一个类 Block 在析构函数中调用 SDL_FreeSurface(surface)。在 main() 创建 Block 的实例时,该对象正常运行,但是当我在另一个具有 vector<Block> block_vector 作为数据成员的类 Control 中使用它时,当我添加 @987654326 的实例时程序崩溃@进入block_vector。我缩小了调用SDL_FreeSurface(surface) 时Block 的析构函数的问题。向向量中添加对象与 is 有什么关系吗?有什么问题?
class Block{
public:
Block(int x, int y);
~Block();
void Load_Image(MediaFunctions &M_Functions);
void SetPosition(int x, int y);
void BlitBlock(SDL_Event &event, MediaFunctions &M_Functions, SDL_Surface *destination);
bool DetectionNames(SDL_Event &event, MediaFunctions &M_Functions, SDL_Surface *destination);
bool DetectionHours(SDL_Event &event, MediaFunctions &M_Functions, SDL_Surface *destination);
bool return_error();
private:
SDL_Surface *block_surface_names;
SDL_Surface *block_surface_hours;
SDL_Surface *block_names_detected;
SDL_Surface *block_hours_detected;
SDL_Rect block_rect_names;
SDL_Rect block_rect_hours;
bool error;
};
//the problem
Block::~Block(){
SDL_FreeSurface(block_surface_hours);
SDL_FreeSurface(block_surface_names);
SDL_FreeSurface(block_hours_detected);
SDL_FreeSurface(block_names_detected);
}
//when doing this
void Control::HandleEvents(SDL_Event &event, MediaFunctions &M_Functions){
if(event.type == SDL_KEYDOWN){
if( event.key.keysym.sym == SDLK_a ){
//append a block instance
BlockVector.push_back(Block (Block(100,100)));
BlockVector.at(block_index).Load_Image(M_Functions);
block_index++;
}
}
}
【问题讨论】:
-
您是否在验证 Block 的实例是否有效?
-
当我从析构函数中删除
SDL_FreeSurface时,程序运行正常。 -
@Unit978:是的,但在那种情况下它可能会泄漏
SDL_Surfaces(这不是一件好事)。 -
这就是为什么我需要知道为什么在析构函数中调用 SDL_FreeSurface 会在我将其添加到向量时导致程序崩溃。
-
正如 Mankarse 所说,我们需要查看您的代码来识别问题。
标签: c++ vector sdl destructor