的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