在 Dosbox 中安装鼠标导致段错误
Posted
技术标签:
【中文标题】在 Dosbox 中安装鼠标导致段错误【英文标题】:Installing mouse causes segment fault in Dosbox 【发布时间】:2021-09-02 23:58:44 【问题描述】:我正在使用 Allegro4 制作一个支持 DOS 上的 GUI 的简单程序。 为了实现鼠标操作,我创建了一个显示鼠标当前信息的形状对象。 Allegro 提供了很多有用的全局变量,如mouse_x、mouse_y、mouse_b 等,只有通过以下代码安装鼠标驱动后才能使用。
install_mouse();
这是我的 MousePointerObjectClass。
class MousePointerObject : public GameObject
public:
MousePointerObject(Scene *scene, std::shared_ptr<GameObject> parent = nullptr, std::string res = "");
virtual void preupdate();
virtual void collides(GameObject &other);
void notCollides(GameObject &other);
private:
int pressed_;
int released_;
friend class Scene;
;
MousePointerObject::MousePointerObject(Scene *scene, std::shared_ptr<GameObject> parent, std::string res)
: GameObject (scene, parent)
setRenderer(new MousePointerRenderer(res + "/renderer"));
setCollider(new PointCollider(0, 0));
void MousePointerObject::preupdate()
place(Vector<float>(mouse_x, mouse_y));
static int held_buttons = 0;
int changed = mouse_b ^ held_buttons;
pressed_ = changed & mouse_b;
released_ = changed & ~mouse_b;
held_buttons = mouse_b;
void MousePointerObject::collides(GameObject &other)
if (pressed_ > 0)
other.mouseDown(pressed_);
if (released_ > 0)
other.mouseUp(released_, true);
other.mouse_inside_ = true;
void MousePointerObject::notCollides(GameObject &other)
other.mouse_inside_ = false;
if (released_ > 0)
other.mouseUp(released_, false);
我在 Ubuntu 上使用 DJGPP 交叉编译了这个程序,它在 Ubuntu 和 Real Dos 上运行良好,没有任何冲突。 但是当它要在 Dosbox 或 Dosbox-x 上运行时,它会导致段错误。 无论鼠标指针是否显示在屏幕上,一旦调用 install_mouse(),当我移动鼠标指针时,Dosbox 会意外退出。 我费了很大劲才解决这个问题,但它们根本不起作用。
任何建议将不胜感激。
【问题讨论】:
不相关:很多有用的全局变量我们对有用的定义可能不同。 使用地址清理器为 ubuntu 编译并查看它是否报告错误。如果是这样,请修复它们。如果没有,您可能必须弄清楚如何让调试器在 dosbox 中工作。 【参考方案1】:原因是由于我用于此程序的引擎。它曾经使用大量的 CPU 和 RAM。经过优化,CPU 和 RAM 使用率大幅下降,在 Dosbox 中也运行良好。 但是还是很慢,所以我一直在优化引擎。
【讨论】:
以上是关于在 Dosbox 中安装鼠标导致段错误的主要内容,如果未能解决你的问题,请参考以下文章
在DosBox SVN Daum中安装了WIn98,怎样实现访问本地硬盘
odoo中安装了错误的模块,导致网页报错进不去,怎么修改后的上传