C++ 文件*访问冲突
我在Visual Studio 2012中遇到了一个恼人的访问冲突问题。我在VisualStudio2010中也遇到了同样的问题,我认为这可能是编译器的问题,但事实并非如此 下面是导致访问冲突的部分代码:C++ 文件*访问冲突,c++,C++,我在Visual Studio 2012中遇到了一个恼人的访问冲突问题。我在VisualStudio2010中也遇到了同样的问题,我认为这可能是编译器的问题,但事实并非如此 下面是导致访问冲突的部分代码: SDL_Surface *cGraphicsManager::LoadImageFromPak(char *filename, char *img_type) { // Load the 'file' to SDL_Surface SDL_Surface *img = NUL
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编译器上编译并运行得很好,这让我觉得它不是错误的代码。
我读到一些关于文件*和Dll调用的问题,但我没有找到如何解决这个问题。
我没有链接警告,我已经链接了所有必要的LIB。我还在调试模式下运行它,并在多线程调试dll(MDd)中编译。
VisualStudio编写代码的速度比MingW快得多,调试也比MingW容易得多,如果有任何回应,我将不胜感激。
非常感谢。地址说明问题-代码正在取消对空指针的引用,以访问距离对象地址
0x14(20)
字节的成员。我会嗅探rw
参数的内容。它不能为null,但可能包含一个为的成员。我还郑重建议使用一个调试器,它会在崩溃时停止,以便您可以检查调用堆栈。最后一个建议-如果您使用的是第三方库,它可能需要某种初始化调用来设置全局状态。如果不这样做可能会导致崩溃(个人体验)。行,那么哪一行代码生成异常???如果使用C++而不是C类,那么可能会有更少的麻烦。当代码崩溃时,<代码> IMGJYTYPE < /代码>的值是什么?@ OLD程序员程序员注意到他的所有样本中的崩溃线。根据要求,img_类型在通话时为“PNG”。我也同意我不应该混合C和C++代码的观点,但是从包文件中读取文件的唯一例子是使用SDLYRWOPS,它使用C代码。而且,rw似乎确实被破坏了。编译器告知无法为其成员加载sdl符号。我真的认为这是前面提到的某种初始化问题,因为它在MingW编译器上运行良好。谢谢大家的帮助!