gpt4 book ai didi

c++ - 如何在函数中释放内存

转载 作者:行者123 更新时间:2023-11-30 04:28:45 26 4
gpt4 key购买 nike

所以我的问题是如何释放这个函数中的“输入”和“输出”。

void DSprite(
SDL_Surface* Input,
SDL_Surface* Output,
int InputX, int InputY,
int InputWidth, int InputHeight,
int OutputX, int OutputY,
bool FollowCamera
)
{
... code

// Free.

SDL_FreeSurface(Input);
Input=NULL;
SDL_FreeSurface(Output);
Output=NULL;

}

没有这个免费部分。我的游戏内存使用量上升得非常快,在 20 秒内从 9 000 K 上升到超过 200 000 K!这个功能有问题吗?它被多次调用每一帧。如何释放它?

但是有了它。这是行不通的。运行几秒钟后,游戏会卡住在本应绘制的第一帧。然后弹出此错误。

Windows has triggered a breakpoint in game.exe.

This may be due to a corruption of the heap, which indicates a bug in game.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while game.exe has focus.

The output window may have more diagnostic information.

如果它是正确的呢?

void DText(TTF_Font *FontIn,const char* TextIn, (...)
{
(...)

SDL_Surface* TextSurf = TTF_RenderText_Solid(FontIn,TextIn,ColorIn);

(...)

//Free

TTF_CloseFont(FontIn);
FontIn=NULL;

SDL_FreeSurface(TextSurf);

free((char*)TextIn);
}

最佳答案

您的程序如何使用输入和输出?代码有什么作用(我的意思是...代码是什么)?肯定有问题,您提供输入和输出并在从函数返回之前释放它们。

从变量名来看,我认为不需要释放 Ouput 表面。因为它似乎在执行 sdl_blit(或 sdl_flip 如果您使用双缓冲区)时崩溃,因为您要 blit 的表面是 NULL 指针。

C/C++ 内存管理:有两种类型的内存分配。静态和动态。

静态的是在代码中声明一个变量

int a;
char b;
// Or even SDL strucutre
SDL_Surface Surface;

为了使其极其简单,当程序启动时,将分配此内存(如果我没记错的话,这就是我们所说的堆栈内存)。该程序将处理那些变量内存。所以你永远不应该尝试手动释放这些变量,它会导致你的程序崩溃。

第二个内存分配是动态的。它允许您根据需要分配内存(在堆内存中)。它可以通过各种方法完成,如 malloc、calloc 等...(新功能仅在 C++ 中可用)。您需要释放您分配的内存,否则您将创建所谓的内存泄漏。

//Example
int* anArray = new int[10]; // I allocated a table of 10 char
// To free
delete [] anArray;

根据您的要求,创建一个全局变量SDL_Surface 表面。SDL_Surface 是一个结构体,这意味着它是一个包含变量的“盒子”。由于 SDL 的工作方式,应使用 SDL_CreateRGBSurface 或其他此类函数创建 SDL 表面。而且由于它的工作原理,您需要使用 SDL_FreeSurface 来释放表面(主要是因为 SDL_Surface 包含一个动态像素数组,因此为了简化管理,SDL 人员创建了一个函数来清理以前创建的表面)。

所以 SDL_Surface 是一个大变量,因为它是动态分配的,所以您可以为 SDL_Surface 类型的变量使用指针。

SDL_Surface * mysurface;

如果您将变量创建为全局变量,则意味着您希望在多个函数中使用它。所以不要在函数中释放它。

但是如果你创建了

SDL_Surface mysurface; // No pointer a standard static allocation

不要试图释放它

问候

问候

关于c++ - 如何在函数中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com