【问题标题】:C++/SDL2 IMG_Load Error (Out of memory)C++/SDL2 IMG_Load 错误(内存不足)
【发布时间】:2016-10-04 22:59:42
【问题描述】:

我正在制作一个射击游戏,并且遇到了一个问题,即在一定时间和连续射击后,精灵根本无法加载。在我的控制台中,打印出一个错误:

“IMG_LOAD_ERROR : Out of memory”(“IMG_LOAD_ERROR :”是我自己的东西)

我还使用文本 (SDL_ttf) 来显示弹药数量。

我现在的假设是我总是在每个生成的敌人的构造函数中调用 IMG_load 函数,但我什至不确定这是否是导致它的原因。我能想到的可能性还有很多。

另外,我会在纹理被破坏时释放它们(当敌人失去健康或离开屏幕时)。

有人能帮我理解这个问题并帮我解决吗?

【问题讨论】:

  • 我很惊讶你承认你没有提供代码,但仍然没有提供代码。您是否意识到我们要求您的代码找出问题所在?
  • 它是发生在同一个图像上还是在程序运行后的某个时间发生?如果是后者,您可能没有释放您之前分配的内存(请参阅@Novros 答案)。如果 valgrind 可以在您的操作系统上运行,它可能是最容易找到此类错误的工具。如果没有 - 有专门用于查找泄漏的替代方案,但它们可能不像 valgrind 那样冗长和直接。看到源代码会很好,但如果你知道这一点并且仍然没有发布代码 - 我怀疑它可能对这个问题来说太大了。

标签: c++ sdl-2


【解决方案1】:

您似乎没有破坏您不需要的纹理/图像或渲染。

SDL_DestroyTexture(img); SDL_DestroyRenderer(渲染器);

绘制图像的简单示例,我找到了https://gist.github.com/armornick/3434362

我的建议:您应该加载所有纹理或开始应用程序或何时需要,但必须是一次。您必须重复使用每张相同的图片。

很高兴看到代码找出来,代码有什么问题。

【讨论】:

  • 抱歉,我忘了说我正在释放敌人析构函数中的内存。*facepalm* 抱歉:|。
猜你喜欢
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
相关资源
最近更新 更多