当我将它编译为 x64 位并且工作正常时,下面的代码可以工作,但是在 x86 上会出现堆损坏错误。我无法弄清楚它有什么问题。
unzFile data;
std::string filename;
unz_file_info info;
Uint8* buffer;
SDL_RWops* rw = NULL;
Mix_Chunk* effect = NULL;
//load zip file and get filename
unzLocateFile(data, filename.c_str(), NULL))
unzOpenCurrentFile(data);
unzGetCurrentFileInfo(data, &info, NULL, 0, NULL, 0, NULL, 0)
buffer = (Uint8*)malloc(info.uncompressed_size);
unzReadCurrentFile(data, buffer, info.uncompressed_size))
rw = SDL_RWFromConstMem(buffer, info.uncompressed_size);
effect = Mix_LoadWAV_RW(rw, 1); // <---Heap corruption here
free(buffer);
它在 VS2012、SDL 2.0、Zlib 1.2.7、Minizip 1.1 中编译
如果需要更多信息,请告诉我。
更新:
所以我做了一些测试,使用 dr 内存,相同的代码库用于加载 png 和 wav,每个都有适当的 sdl 函数。它们是 Mix_loadWAV_RW 和 IMG_Load_RW。显然,只有在 Mix_loadWAV_RW 函数发生堆损坏时,IMG_Load_RW 函数才能顺利运行。所以我猜测它更多地与 Mix_loadWAV_RW 函数有关,它对每个版本的内存做了什么,而不是 minizip、SDL、opengl 和 SDL_IMG 部分。
我将尝试做一个仅隔离 SDL_Mixer 和 minizip 的测试项目。谁能告诉我我应该做什么样的测试,或者经历过类似的事情。