0

Visual Studio Express 2012 のデバッガーは次のように述べています。

Unhandled exception at 0x00B8147F in PFPJ.exe: 0xC0000005: Access violation 
reading location 0x00000008.

デバッガーが問題であると言うコードの部分は次のとおりです。

(ご存じのとおり、widthheightは でグローバルに宣言され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 ++に比較的慣れていないので、洞察が役に立ちます)

4

1 に答える 1