类中的SDL_Surface指针变为NULL

SDL_Surface pointer withing class becoming NULL

本文关键字:指针 NULL Surface SDL      更新时间:2023-10-16

我自己定义的类中的SDL_Surface, Actor,在我加载SDL_Surface后返回NULL。在大量控制台输出并使用GDB查找错误可能在哪里之后。Actor类包含一个指向SDL_Surface的指针,而Actor::getSurface返回指向SDL_Surface的指针。

当然,你相信更多的代码显示将有助于解决问题,我很乐意分享。

我的程序输出是:

--Surface was loaded.
Surface is NULL after loading.

我删掉了代码中不重要的部分。

main.cpp:

SDL_Init( SDL_INIT_EVERYTHING );
Actor sprite;
sprite.loadSurface("images/bg.bmp");
if( sprite.getSurface() == NULL )
  std::clog << "Surface is NULL after loading." << std::endl;

Actor.cpp

bool Actor::loadSurface(std::string t_filename)
{
  std::clog << "-ACTOR " << m_id << " LOADSURFACE" << std::endl;
  SDL_Surface * loadedImage = NULL;
  m_surface = NULL;
  loadedImage = IMG_Load( t_filename.c_str() );
  if( loadedImage != NULL )
  {
    std::clog << "--Surface was loaded." << std::endl;
    m_surface = SDL_DisplayFormatAlpha( loadedImage );
    SDL_FreeSurface( loadedImage );
    return true;
  }
  std::clog << "--Surface was not loaded." << std::endl;
  return false;
}

您的SDL_DisplayFormatAlpha返回NULL

如果您在尝试转换图像之前没有调用SDL_SetVideoMode,则可能发生这种情况,请验证这种情况。

另一个会导致NULL返回值的选项是如果内存耗尽。