mix_playMusic导致内存损坏
Mix_PlayMusic causing memory corruption
我一直在从事的游戏中遇到麻烦,一旦我添加音乐,它就开始在我经常被称为的纹理加载代码中进行segfault,在5-30秒之间它开始演奏后。我能想到的最好的是,这是某种记忆腐败。经过一周的好一周,试图调试它(尝试Gflags PageHeap之类的事情(之后,我设法将其切成以下代码,这仍然显示出该问题。
有时,这种情况会带有呼叫箱通过SDL2_mixer.dll
,但是大多数情况下它发生在SDL_CreateTextureFromSurface
调用中,因为渲染器处于不良状态。NumTextures在我的计算机上达到15000-40000(Windows 10 x64,编译为X86的程序(。
我的直觉告诉我,我的环境或代码中存在一个问题,而不是SDL本身中的问题,但我很茫然。任何帮助或见解都将不胜感激。
#include <SDL_image.h>
#include <SDL_mixer.h>
#include <cassert>
int main(int argc, char* argv[])
{
assert(SDL_Init(SDL_INIT_EVERYTHING) == 0);
SDL_Window * pWindow_ = SDL_CreateWindow(
"", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0x0);
assert(pWindow_ != nullptr);
SDL_Renderer * pRenderer_ = SDL_CreateRenderer(pWindow_, -1, 0);
assert(pRenderer_ != nullptr);
assert(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 512) == 0);
Mix_Music * pMusic = Mix_LoadMUS("sounds/tranquility.wav");
assert(pMusic != nullptr);
assert(Mix_PlayMusic(pMusic, -1) == 0);
SDL_Surface * pSurface = IMG_Load("images/caution.png");
assert(pSurface != nullptr);
SDL_Texture * pTexture = SDL_CreateTextureFromSurface(pRenderer_, pSurface);
assert(pTexture != nullptr);
int numTextures = 0;
while (true)
{
numTextures += 10;
assert(pTexture != nullptr);
SDL_DestroyTexture(pTexture);
pTexture = SDL_CreateTextureFromSurface(pRenderer_, pSurface);
assert(pTexture != nullptr);
}
}
解决方案是更新到最新版本的SDL(2.0.3-> 2.0.5(。
我开始使用发动机代码库来开发有关项目,我大约在2年前将其从SDL 1.2升级到2.0,当时最新版本为2.0.3。
当我最近添加声音和音乐时,我采用了最新的SDL_mixer
,并且没有想到将SDL更新为最新的2.0.5。
获得了SDL的最新开发和运行时库(以及SDL_image
和SDL_mixer
的良好度量(后,问题消失了。
我对此并不完全满意。如果不兼容,较新的SDL_mixer
与较旧的SDL链接在一起,我感到非常惊讶。此外,我在网上找不到任何提示任何兼容性问题的资源。因此,我有一种不安的感觉,可能还有其他事情正在发生,这是由升级偶然解决的。
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在调试 malloc():新内存损坏
- 仅特定内核计数上的 MPI 内存损坏
- C++程序错误:malloc():内存损坏
- 调用std::函数成员时内存损坏
- C++ 内存损坏检测
- 由于标头中的 #define 不匹配而导致内存损坏
- C STD ::线程中的种族状况或内存损坏
- malloc()内存损坏仅通过为特定数量编写int数组
- 字符串标记化期间的内存损坏
- 从检测到 glibc 正常退出 - malloc():内存损坏
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- std :: string ::擦除会导致内存损坏
- 编译器如何检测内存损坏
- mix_playMusic导致内存损坏
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 两个内联程序集调用与一个内联程序集调用中的内存损坏?
- 如何调试不确定内存损坏?
- 增强Dijkstra代码会导致片段内存损坏
- 内存损坏从vb.net调用c dll