0

以下のコードは、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 のみを分離するテスト プロジェクトを実行してみます。どのようなテストを行うべきか、または同様のことを経験した人はいますか?

4

1 に答える 1