我有一个 64 位应用程序,它偶尔会因错误的类型转换操作而崩溃。该应用程序是用 C++ 开发的。我们观察到的错误代码是:
PtClass* obj = new PtObject();
funct->DoSpecificTask((o_4ub)obj) //where o_4ub is 32bit pointer variable.
现在,我们知道这是问题代码,但是,这种崩溃只发生在一台机器上。如果我们尝试相同的场景(许多随机场景),它不会在相同配置的其他机器上崩溃(win server 2008 R2)。
根据我的分析,这与地址空间有关,当它在机器 1 中分配超过 32 位时,我们会崩溃(在向下转换期间)。可能,在机器 2 中,分配的地址空间不超过 32 位,所以我们是垂头丧气时不会崩溃。
我的问题是,我们能做些什么让我每次都在机器 2 上崩溃?就像,我的应用程序应该分配任何地址空间总是超过 32 位。(可能导致崩溃)