6

SDL 2.0 教程使用从 main 返回的代码,而无需首先破坏任何资源指针:

int main(int argc, char** argv){
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1){
        std::cout << SDL_GetError() << std::endl;
        return 1; 
    }

    window = SDL_CreateWindow("Lesson 2", SDL_WINDOWPOS_CENTERED, 
        SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
    if (window == nullptr){
        std::cout << SDL_GetError() << std::endl;
        return 2; //this
    }
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED 
        | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == nullptr){
        std::cout << SDL_GetError() << std::endl;
        return 3; //and this too
    }

我应该在退出之前将终止函数告诉 DestroyRenderer、DestroyWindow、DestroyTexture 等吗?

4

2 回答 2

2

与“我应该在退出程序之前释放我分配的内存”相同的问题。是的,如果 SDL/X11/GL/等中没有错误。完成代码 - 无论如何都将被释放。但我看不出为什么你不应该自己这样做。

当然,如果您崩溃而不是退出 - 很有可能有些事情不会完成,例如您不会将显示返回到本机桌面分辨率。

于 2013-09-19T08:49:59.813 回答
0

我个人遇到过 SDL_TEXTURE 的问题,它在程序运行时导致内存泄漏,并且当程序通常使用 37 mb 的内存时,程序泄漏了大约 2gb 的内存后,图片的显示就停止了。

SDL_DestroyTexture(texture);

每次我用渲染器显示不同的图片并且内存泄漏消失时,我都会调用这个

于 2020-02-25T10:16:03.733 回答