Visual Studio 2012 で厄介なアクセス違反の問題が発生しました。Visual Studio 2010 で同じ問題が発生し、コンパイラの問題である可能性があると考えましたが、そうではないことが判明しました。
アクセス違反が発生するコードの一部を次に示します。
SDL_Surface *cGraphicsManager::LoadImageFromPak(char *filename, char *img_type)
{
// Load the 'file' to SDL_Surface
SDL_Surface *img = NULL;
char errorname[50];
sprintf(errorname, "Unable to load image %s from pakfile", filename);
FILE *fin = pakfile.open_file(filename);
if(!fin)
{
ErrorLog(errorname);
return NULL;
}
SDL_RWops *rw;
rw = SDL_RWFromFP(fin, 1);
if (!rw)
{
ErrorLog("Erro na linha 213");
return NULL;
}
img = IMG_LoadTyped_RW(rw,0, img_type); // it crashes on this line
if(img == NULL)
ErrorLog("Unable to load image from pakfile.");
SDL_FreeRW(rw);
//pakfile.close_mpk();
//if (img_type == "PNG")
img = add_transparency(img);
return img;
}
場所 0x00000014 でアクセス違反の書き込みが発生します。奇妙なことに、MingW コンパイラでコンパイルして正常に実行されるため、間違ったコードではないと思います。File* と Dll の呼び出しに関する問題について何か読みましたが、それを修正する方法が見つかりませんでした。リンクに関する警告はなく、必要なすべてのライブラリをリンクしました。また、デバッグ モードで実行し、マルチスレッド デバッグ DLL (MDd) でコンパイルしています。Visual Studio は MingW よりもはるかに高速にコードを記述でき、デバッグも簡単です。どうもありがとうございました。