- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我的问题是如何释放这个函数中的“输入”和“输出”。
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/
我有一个附加了 View Controller 的 AVAudioPlayer 实例。 @property (nonatomic, retain) AVAudioPlayer *previewAudi
我是java初学者。假设我声明了一个 Account 类型的变量 Account _account = new Account("Thomas"); 然后在其他地方我做了这样的事情: _account
我在我的应用程序中使用了 3 个 UIViewController,现在我想知道当我从另一个应用程序切换到另一个 UIViewController 时释放它们是否是一个好主意。显然,这将是隐藏的,当它
我分配了一个直接缓冲区: ByteBuffer directBuffer = ByteBuffer.allocateDirect(1024); 我读过: Deallocating Direct Buf
场景。我有一个图表,我可以使用右键单击来执行平移。这非常有效。然后我完美地添加了右键菜单。 问题。现在,即使在拖动操作完成后释放鼠标,也会显示右键菜单。 有没有办法在 Java Swing 或 Jav
我使用此代码获取 ABPerson 的姓氏 CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)personRecordRef, kABP
目前,我们在基于 C 的嵌入式应用程序中使用 malloc/free Linux 命令进行内存分配/取消分配。我听说这会导致内存碎片,因为内存分配/取消分配会导致堆大小增加/减少,从而导致性能下降。其
当我尝试释放缓冲区时遇到问题。每次我尝试将缓冲区传递给释放方法时,都会发生段错误。 Valgrind 确认段错误位于 BufferDeallocate 方法中。 ==30960== Memcheck,
我想知道何时按下或释放修改后的键(Ctrl 或 Shift)。 基本上,用户可以在按下修改键的情况下执行多次击键,而我不想在它被释放之前执行一个操作(想想 Emacs 和 Ctrl + X + S).
我编写了一个相当大的网络应用程序。它运行良好一段时间,然后慢慢开始运行缓慢,因为 DOM 节点开始爬升到 80,000 - 100,000 左右。 所以我一直在 Chrome 开发工具控制台 (DCT
我知道在像 c 这样的语言中,我需要在分配内存后释放它。 (我来自 Java),对此我有几个问题: 当我在做的时候: int array[30]; (即创建一个大小为 30 个整数的数组)与
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How to release pointer from boost::shared_ptr? Detach
我有一个可以从多个后台线程访问的类,可能同时访问。我无法复制该类,因为重新创建它的内容(处理或内存方面)可能很昂贵。 也有可能在后台处理仍在继续并访问该属性时替换了此类的属性。 目前我有定期的保留/释
这个问题是对: 的扩展链接-1:Creating an image out of the ios surface and saving it Link-2:Taking Screenshots fro
我有一个实例变量 NSMutableArray* searchResults。 首先,我初始化它: self.searchResults = [[NSMutableArray alloc] init]
如果我在堆上声明一些东西,比如 char *a=new char[1000] 并且主程序停止,如果没有 delete[]<,那么分配的内存会发生什么 调用?它保留在堆上还是自动释放? 最佳答案 就C+
在开发相机应用时,我遇到了一个异常,该异常仅在我切换到其他应用时发生(onPause() 用于我的应用)。 01-15 17:22:15.017: E/AndroidRuntime(14336): F
使用 JDK 1.8 编译时出现 maven 编译器错误 无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (de
将 BufferedImage 保存到磁盘(以释放内存)的最快方法是什么? 我的 Java 应用程序处理大量图像(每约 300 毫秒将图像加载到内存中)。大多数这些图像都会立即被丢弃 (gc),但每隔
使用 JDK 1.8 编译时出现 maven 编译器错误 未能在项目 DUMMY 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1:
我是一名优秀的程序员,十分优秀!