2013-05-02 50 views
0

我有一个恼人的访问冲突问题与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)中编译。 与MingW相比,Visual Studio编写代码要快得多,而且调试起来也比较容易,我会很感激任何回应。 非常感谢。

+3

好吧,哪行代码产生异常? – OldProgrammer 2013-05-02 16:49:19

+3

如果您实际使用C++而不是C来使用类,那么您可能会遇到更少的麻烦。 – rubenvb 2013-05-02 16:51:05

+0

'img_type'在崩溃时的值是多少? – olevegard 2013-05-02 16:51:54

回答

2

地址正在告诉 - 代码正在取消引用空指针来访问对象地址中的0x14 (20)字节的成员。我会嗅探rw参数的内容。它可能不是null,但可能包含一个成员。我也会认真地推荐使用一个调试器,它会在崩溃时暂停,以便检查调用堆栈。最后一个建议 - 如果您使用的是第三方库,则可能需要某种初始化调用来设置全局状态。不这样做可能会导致崩溃(个人经验)。

+0

感谢您提供所有反馈。根据要求,img_type在通话时间为“PNG”。我也同意评论说我不应该混用C和C++代码,但是从使用SDL_Rwops的包文件中读取文件的唯一例子是它,它使用C代码。另外,rw似乎确实被损坏了。编译器告诉不能为其成员加载sdl符号。我真的认为这是一种初始化问题,因为它在MingW编译器上运行良好。感谢所有帮助家伙! – 2013-05-03 00:08:42