C++ 文件*访问冲突

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

我在Visual Studio 2012中遇到了一个恼人的访问冲突问题。我在VisualStudio2010中也遇到了同样的问题,我认为这可能是编译器的问题,但事实并非如此

下面是导致访问冲突的部分代码:

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编译器上运行良好。谢谢大家的帮助!