c ++ и SDL - ошибка нарушения прав доступа - PullRequest
0 голосов
/ 02 февраля 2012

Мне нужна твоя помощь. Весь день я пытаюсь понять, почему я получаю эту ошибку , но мне ничего не приходит в голову. То, что я хочу, чтобы моя программа сделала, это взять изображение в формате 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 голосов
/ 02 февраля 2012

Вы создаете плитки так:

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.

...