Windows 10上的VC ++ MFC应用程序-指定了无效的句柄

时间:2019-02-05 23:43:30

标签: c++ visual-studio mfc windows-10

我在Visual Studio中创建了一个新的C ++ MFC MDI应用程序。

第一个问题- 在调试/发行版(仅x86)中启动它时会引发异常An invalid handle was specified

这是我的配置。 :

  • Visual Studio Pro 2015版本14.0.25431.01更新3
  • Windows 10版本1809(操作系统内部版本17763.292)
  • .NET Framework版本4.7.03190
  • 已安装Visual C ++可再发行组件(2005、2008、2010、2012、2013、2015)

按“中断”:如果没有Microsoft Symbol Server,则表明C:\Windows\SysWOW64\ntdll.dll中出现问题。对于Microsoft Symbol Server,它仅显示“源不可用”。

按“继续”一两次:启动应用程序,该应用程序可以正常使用。

通过单击对话框“ X”按钮退出应用程序时,ntdll.dll中还会引发Access violation reading location。在(x86)和(x64)中抛出此异常。

我在另外三台运行Windows 10(旧版本)的PC上进行了测试,并且发生了相同的事情。我在运行Windows 7的2台PC上进行了测试,没有问题。

编辑- 在抛出这些异常之后,请查看以下两个用于调用堆栈的屏幕截图。

Callstack for Invalid Handle Exception when launching the app

Callstack for Access Violation Exception when exiting the app

第二个问题-初始化变量的值随机错误。

例如,我已经在基类构造函数中看到了这一点:

variable = 0; // int

调试器告诉我variable的值为52685。不确定这是否是巧合,但是VC ++ 2015 Redistributable Update 3的ID是52685(请参阅URL参数)。

Microsoft Visual C++ 2015 Redistributable Update 3 / id=52685

控制台中variable的输出显示正确的值(0)。

我很乐意为您解决此问题提供帮助,因为它会使调试工作变得非常困难。我唯一确定的是它与Windows 10相关。

编辑- 调试时,请查看以下两个变量值的屏幕截图。在第一个中,您可以看到所有“ int”变量的值都为-842150451(应该改为0,对吧?)。这些变量在类的私有部分中声明。第二张屏幕截图显示了此类的默认构造函数。这些“ int”(image_bpp)之一显示值52685而不是分配的0。如果我切换image_bpp和image_pixel_color的初始化,则image_pixel_color显示错误的值。

Declared variables values

Initialized variables values

看起来我不是第一个遇到此问题的人。我忘了提到我使用的是简单继承(实例化派生类,然后调用基类的构造函数,这是我放置断点的地方)。

请参阅此链接以供参考:Compiler bug with derived classes

0 个答案:

没有答案
相关问题