【发布时间】:2014-08-10 22:56:43
【问题描述】:
我在 c++ 中使用 code::blocks 中的 allegro 库进行编程。我声明了一个位图,加载了位图并 blit 图像以测试位图是否被绘制到屏幕中。我编译了这个程序,编译器没有发现错误。当我运行程序时,位图未绘制到屏幕上,并且 allegro 崩溃了。我更改了颜色深度,并确保我在代码中包含了不会使 allegro 崩溃但仍无济于事的内容。然后我运行调试,看看这个程序是否有问题。我收到这条消息:
sigsegv segmentation fault
#0 10004DDD colorconv_blit_24_to_15() (C:\Windows\SysWOW64\alleg42.dll:??)
#1 0028FE3C ?? () (??:??)
#2 1006C3E0 get_uformat() (C:\Windows\SysWOW64\alleg42.dll:??)
这是什么意思,我该如何解决?有什么解决办法吗? 这是我的代码:
$
#include <allegro.h>
using namespace std;
int main()
{
allegro_init();
install_keyboard();
set_color_depth(8);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
BITMAP *link=NULL;
link=load_bitmap("cave.bmp",NULL);
blit(link,screen,0,0,0,0,25,177);
readkey();
destroy_bitmap(link);
allegro_exit();
return 0;
}
END_OF_MAIN()
【问题讨论】:
-
为什么你认为不检查
link是否为 null 而是在 Stack Overflow 上发布是可以的?! 我们应该如何知道您的图片是否已加载? -
我检查了它并试图解决涉及“null”的问题,但加载位图时 allegro 仍然崩溃。我浏览了所有论坛,了解 allegro 崩溃的原因并按照他们的建议进行操作,但仍然没有发生任何事情,这就是我在 Stack Overflow 上发布此内容的原因。
-
如果 "cave.bmp" 存在并且是有效的 .bmp 文件,则此代码可以正常工作。我的猜测是您的 Cave.bmp 版本在指定的路径中不存在(没有路径与可执行文件的路径相同),或者它无效。您没有检查 load_bitmap 是否返回非空指针这一事实也是一个问题。