[英]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.