的Visual Studio Express的2012的調試器說:訪問衝突
Unhandled exception at 0x00B8147F in PFPJ.exe: 0xC0000005: Access violation
reading location 0x00000008.
這裏是調試說的代碼部分的問題是:
(只要你知道,width
和height
在main.cpp
全局聲明。所有使用這些變量的函數內main.cpp
。
SDL_Surface* bmmap = NULL;
bmmap = SDL_LoadBMP(file);
width = bmmap -> w;
height = bmmap -> h;
具體爲width = bmmap -> w
將返回錯誤。
Problem signature:
Problem Event Name: APPCRASH
Application Name: PFPJ.exe
Application Version: 0.0.0.0
Application Timestamp: 51a57a2e
Fault Module Name: PFPJ.exe
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 51a57a2e
Exception Code: c0000005
Exception Offset: 00001838
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
每隔例子中,我發現越來越寬度或高度出SDL_Surface*
的使用這個符號。我不完全明白髮生了什麼事。
我確定的是,我自己的內置文件流有一個輸出文件,告訴我它失敗的位置。當它在double for循環中引用寬度/高度時,它在另一個函數中失敗。 SDL_Surface結構定義如下:
typedef struct SDL_Surface {
Uint32 flags; /* Read-only */
SDL_PixelFormat *format; /* Read-only */
int w, h; /* Read-only */
Uint16 pitch; /* Read-only */
void *pixels; /* Read-write */
SDL_Rect clip_rect; /* Read-only */
int refcount; /* Read-mostly */
} SDL_Surface;
這讓我失望。我不明白這個錯誤來自哪裏,以及爲什麼這是一個問題。它在我使用->
表示法的函數的上下文中起作用。我發現了一些使用surface -> w
來獲得寬度的程序,那麼問題是什麼?
(我是比較新的C/C++,所以任何見解是有幫助的)
哦,有趣。我應該如何檢查它的工作原理?我以爲它只是返回指向SDL_Surface結構體的指針。而且,據我所知,它確實有效。我有一個函數將曲面轉換成二維數組,並且我打印數組以確保... [我認爲]它可以正常工作。 – user2085722
好吧,只需添加一個測試if(bmmap == NULL)printf(「Error」)'或類似的東西,看看你得到了什麼。然後找出爲什麼'SDL_LoadBMP'失敗... –
是的,BMP肯定是正確加載。沒有錯誤。任何想法爲什麼它挑出這兩行作爲罪魁禍首?因爲在函數內部,寬度和高度都很好,並能夠按預期生成圖像。 – user2085722