C++ C++;SDL初始化一切&;获取运行时错误

C++ C++;SDL初始化一切&;获取运行时错误,c++,runtime,sdl,C++,Runtime,Sdl,我只是想省略SDL_Init()函数,但一切都正常。我指的是音频和图形。这是否意味着这个功能是无用的 此外,我在关闭程序时遇到运行时错误: “此应用程序请求运行时以异常方式终止它。有关详细信息,请与应用程序的支持团队联系” 这是什么原因造成的?我正在正确地关闭一切: SDL_FreeSurface(Screen); SDL_FreeSurface(Message); Mix_FreeMusic(mus2); TTF_CloseFont(Font); TTF_Quit(); SDL_Quit();

我只是想省略SDL_Init()函数,但一切都正常。我指的是音频和图形。这是否意味着这个功能是无用的

此外,我在关闭程序时遇到运行时错误: “此应用程序请求运行时以异常方式终止它。有关详细信息,请与应用程序的支持团队联系”

这是什么原因造成的?我正在正确地关闭一切:

SDL_FreeSurface(Screen);
SDL_FreeSurface(Message);
Mix_FreeMusic(mus2);
TTF_CloseFont(Font);
TTF_Quit();
SDL_Quit();
以下是im使用的唯一表面/字体/音乐:

//The surfaces
TTF_Font *Font = NULL;
SDL_Surface *Screen = NULL;
SDL_Surface *Message = NULL;
Mix_Music *mus2 = Mix_LoadMUS("./music.mp3");
如果需要完整的源代码,请询问

编辑:
错误是由于我试图释放屏幕表面

SDL_Init()的主要功能似乎是错误处理(而不是初始化各种子系统)。从源代码中,
SDL_Init()
调用以下函数:

void SDL_InstallParachute(void)
{
/* Set a handler for any fatal signal not already handled */
int i;
#ifdef HAVE_SIGACTION
struct sigaction action;

for ( i=0; SDL_fatal_signals[i]; ++i ) {
    sigaction(SDL_fatal_signals[i], NULL, &action);
    if ( action.sa_handler == SIG_DFL ) {
        action.sa_handler = SDL_Parachute;
        sigaction(SDL_fatal_signals[i], &action, NULL);
    }
}
#ifdef SIGALRM
/* Set SIGALRM to be ignored -- necessary on Solaris */
sigaction(SIGALRM, NULL, &action);
if ( action.sa_handler == SIG_DFL ) {
    action.sa_handler = SIG_IGN;
    sigaction(SIGALRM, &action, NULL);
}
#endif
#else
void (*ohandler)(int);

for ( i=0; SDL_fatal_signals[i]; ++i ) {
    ohandler = signal(SDL_fatal_signals[i], SDL_Parachute);
    if ( ohandler != SIG_DFL ) {
        signal(SDL_fatal_signals[i], ohandler);
    }
}
#endif /* HAVE_SIGACTION */
return;
}
此函数设置了一个安全网,可以处理初始化子系统似乎无法处理的运行时错误。这可能解释了退出应用程序时出现的运行时错误,因为子系统可能无法处理该错误


简言之,如果开发人员希望调用库的初始化方法只是为了安全,那么您应该始终调用这些方法。

错误是由于我试图释放屏幕表面,这实际上是SDL_Quit()执行的任务。我不知道我为什么这么做:P

你应该总是调用
SDL_Init()
,也许它在你的特定平台上什么都不做,或者你碰巧没有碰到它初始化的任何东西,但是库的作者希望调用它,所以为了避免微妙和混乱的错误,你应该调用它。谢谢你,Collin。我想必须调用SDL_Init,但它确实让我想知道,如果它在我的平台上没有任何改变,它到底会做什么@用户1534664使用源代码Luke。