[英]Program received signal SIGSEGV, Segmentation fault in getter method
我当时使用Code :: Blocks制作游戏,并遇到了Segmentation Fault错误。 我在这里浏览了其他问题,找不到任何帮助。 我有一个Sprite
类,它表示游戏中的基本对象,还有一个Window
类,用于控制游戏屏幕的显示。 我运行调试器,它在行return image;
处给了我错误return image;
来自下面的getImage()
方法。
SDL_Surface* Sprite::getImage() {
return image;
}
我在Sprite
的构造函数中调用了以下setImage()
方法,并验证了SDL_ConvertSurface
没有返回NULL
。
void Sprite::setImage(string path) {
SDL_Surface* loadedSurface = IMG_Load( path.c_str() );
if( loadedSurface == NULL ) {
printf( "Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError() );
} else {
image = SDL_ConvertSurface( loadedSurface, surface->format, NULL );
if( image == NULL ) {
printf( "Unable to optimize image %s! SDL Error: %s\n", path.c_str(), SDL_GetError() );
}
SDL_FreeSurface( loadedSurface );
}
}
我在Window
mainloop()
中调用方法getImage()
,如下所示,其中将sprites
声明为Sprite* sprites[10];
:
void Window::mainloop() {
bool quit = false;
SDL_Event e;
while( !quit ) {
while( SDL_PollEvent( &e ) != 0 ) {
if( e.type == SDL_QUIT ) {
quit = true;
}
}
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, red, green, blue ) );
for (int i = 0; i < spritesNum; i++) {
SDL_BlitScaled( sprites[spritesNum]->getImage() , NULL, screenSurface, sprites[spritesNum]->getRect() );
}
SDL_UpdateWindowSurface( window );
}
}
您可能在这里索引超出范围
for (int i = 0; i < spritesNum; i++) {
SDL_BlitScaled( sprites[spritesNum]->getImage() , NULL, screenSurface, sprites[spritesNum]->getRect() );
}
我假设你想用你的计数器i
?
for (int i = 0; i < spritesNum; i++) {
SDL_BlitScaled( sprites[i]->getImage() , NULL, screenSurface, sprites[i]->getRect() );
}
否则,如果您的数组sprites
的长度为spritesNum
,则索引超出范围,并且执行spritesNum
次数。
无论如何,您至少应该确认您没有在这里取消引用空指针
sprites[i]->getImage()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.