c ++和SDL-访问冲突错误

时间:2012-02-02 18:45:06

标签: c++ visual-c++ sdl

我需要你的帮助。我整天想弄明白为什么我会得到这个error,但我没有想到什么。我希望我的程序要做的是拍摄一个png图像并将其切片到瓷砖,以后我可以用它来制作地图。 那么,任何人都可以帮我解决这个错误吗?

#include "SDL.h"  
#include "SDL_image.h"
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#pragma comment(lib, "SDL_image.lib")

    int main(int argc,char *argv[]) {


    SDL_Init(SDL_INIT_EVERYTHING);


    SDL_Surface *screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

    IMG_Init(IMG_INIT_PNG);
    SDL_Surface *mapTileSet;
    mapTileSet = IMG_Load("map.png");

    SDL_Surface *myTiles[4];

    for(int i = 0; i < 3; i++)
        myTiles[i] = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCCOLORKEY, 32, 32, 32, 0, 0, 0, 0);
    for(int y = 0; y < 3; y++)
    {
        for(int x = 0; x < 3; x++)
        {   
             int slice_x = x * 32;    
             int slice_y = y * 32;    

             SDL_Rect srcRect;    
             srcRect.x = slice_x;    
             srcRect.y = slice_y;    
             srcRect.w = 32;   
             srcRect.h = 32;    
             SDL_Rect dstRect;    
             dstRect.x = 0;    
             dstRect.y = 0;  

             int i =  x + y * 4;
             SDL_BlitSurface(mapTileSet, &srcRect, myTiles[i], &dstRect);
        }
    }

    SDL_BlitSurface(myTiles[0], 0, screen, 0);
    SDL_Flip(screen);
    SDL_Delay(10000);


    IMG_Quit();

    SDL_Quit();

    return 0;
}

调试日志:

'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\Debug\project.exe', Symbols loaded.
'project.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Program Files\AVAST Software\Avast\snxhk.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\SDL.dll', Binary was not built with debug information.
'project.exe': Loaded 'C:\Windows\System32\advapi32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\msvcrt.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\sechost.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\rpcrt4.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\gdi32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\user32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\lpk.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\usp10.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\winmm.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\SDL_image.dll', Binary was not built with debug information.
'project.exe': Loaded 'C:\Windows\System32\msvcr100d.dll', Symbols loaded.
'project.exe': Loaded 'C:\Windows\System32\imm32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\msctf.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\ddraw.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dciman32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\setupapi.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\cfgmgr32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\oleaut32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\ole32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\devobj.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dwmapi.dll', Cannot find or open the PDB file
'project.exe': Unloaded 'C:\Windows\System32\ddraw.dll'
'project.exe': Unloaded 'C:\Windows\System32\dwmapi.dll'
'project.exe': Unloaded 'C:\Windows\System32\setupapi.dll'
'project.exe': Unloaded 'C:\Windows\System32\devobj.dll'
'project.exe': Unloaded 'C:\Windows\System32\oleaut32.dll'
'project.exe': Unloaded 'C:\Windows\System32\ole32.dll'
'project.exe': Unloaded 'C:\Windows\System32\cfgmgr32.dll'
'project.exe': Unloaded 'C:\Windows\System32\dciman32.dll'
'project.exe': Loaded 'C:\Windows\System32\uxtheme.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dwmapi.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\KBDUS.DLL', Cannot find or open the PDB file
'project.exe': Unloaded 'C:\Windows\System32\KBDUS.DLL'
'project.exe': Loaded 'C:\Windows\System32\KBDUS.DLL', Cannot find or open the PDB file
'project.exe': Unloaded 'C:\Windows\System32\KBDUS.DLL'
'project.exe': Loaded 'C:\Windows\System32\dsound.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\ole32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\powrprof.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\setupapi.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\cfgmgr32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\oleaut32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\devobj.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\dinput.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\hid.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\wintrust.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\crypt32.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\msasn1.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Windows\System32\cryptbase.dll', Cannot find or open the PDB file
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\libpng15-15.dll', Binary was not built with debug information.
'project.exe': Loaded 'C:\Users\Rokas\Desktop\The Game\The Game\zlib1.dll', Binary was not built with debug information.
First-chance exception at 0x681247e3 in project.exe: 0xC0000005: Access violation reading location 0xccccccf8.
Unhandled exception at 0x681247e3 in project.exe: 0xC0000005: Access violation reading location 0xccccccf8.
The thread 'Win32 Thread' (0xd94) has exited with code -805306369 (0xcfffffff).
The thread 'Win32 Thread' (0x12f8) has exited with code -805306369 (0xcfffffff).
The program '[3568] project.exe: Native' has exited with code -805306369 (0xcfffffff).

1 个答案:

答案 0 :(得分:0)

您正在创建这样的图块:

for(int i = 0; i < 3; i++)
    myTiles[i] = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCCOLORKEY, 32, 32, 32, 0, 0, 0, 0);

我将等于0,1和2

但是像这样访问它们:

int i =  x + y * 4;
    SDL_BlitSurface(mapTileSet, &srcRect, myTiles[i], &dstRect);

其中x和y分别为0,1和2.一旦y大于0,您将访问无效数据。

通常,i = x + y * 4语句相对于包含循环似乎格式不正确,因为它将生成序列{0,1,2,4,5,6,8,9,10},这省略了要素3和7。