在Win7 64位上因未处理的首次机会异常而崩溃(在XP 32位、Linux 64位上没有问题)
Crash over unhandled first chance exception on Win7 64bit (no issue on XP 32bit, Linux 64bit)
我在Visual Studio Express 2010下用C++编写OpenGl程序时遇到了一个奇怪的问题
我使用:Windows 7 64位,OpenGl 4.x
我的合作伙伴使用:Windows XP 32位、Visual Studio Express 2010、OpenGl 2.x
到目前为止,我们只是为我们的模型绘制顶点,它在两个系统上都很好(我知道,我知道:不推荐使用,但我们仍然是初学者)。现在,他包含了一个库来导入三维网格并制作动画。对他来说一切都很好,但我有
Ant Simulation.exe中0x0055f838处的首次机会异常:0xC0000005:读取位置0x00bb0000时发生访问冲突
Ant Simulation.exe中0x0055f838处未处理的异常:0xC0000005:读取位置0x00bb0000时发生访问冲突。
使用调试器,我将问题追溯到行
glDrawArrays(GL_QUADS,0,n_data);
我试图捕获代码,但没有触发任何内容。奇怪的是,昨天我可以用调试器浏览这行2-3次,直到它崩溃,今天它直接崩溃了。我昨天检查了n_data每次都是一样的。如果我在Windows中执行*.exe,它会崩溃(下面的错误代码)。当我的合作伙伴发送他的*.exe时,它通常不起作用,但有一次我可以启动它。我在其他窗口上复制了错误。我们在Linux 64位上尝试过,没有问题。我试着在兼容模式下运行它,但问题仍然存在(仍然崩溃)。
我四处搜索,发现了以下内容:
https://blogs.msdn.com/b/debugger/archive/2010/05/12/visual-studio-debugger-fails-to-catch-unhandled-exception-for-a-windows-form-or-wpf-application.aspx?Redirected=true
不确定我是否理解正确。有一个异常我无法捕捉,但它会杀死应用程序——但为什么其他系统没有遇到这个异常的问题呢?
我试图用链接中描述的方式解决它,但在VS Express中,我似乎没有抛出第一次机会异常的菜单。我会尝试获得VS 2012,但尽管如此,我还是想知道:这是一个神秘的Windows问题,还是可能是我的代码出现问题导致了崩溃(如链接中的一条评论所示)?我也非常感谢对实际情况的解释…
运行*.exe:时出现的错误
问题事件名称:APPCRASH
应用程序名称:Ant Simulation.exe
应用程序版本:0.0.0.0
应用程序时间戳:511d99a3
故障模块名称:StackHash_0a9e
故障模块版本:0.0.0.0
故障模块时间戳:00000000
异常代码:c0000005
异常偏移:0037f278
操作系统版本:6.1.76001.2.1.0.256.48
区域设置ID:1031
附加信息1:0a9e
附加信息2:0a9e372d3b4ad9135b953a78882e789
附加信息3:0a9e
附加信息4:0a9e372d3b4ad9135b953a78882e789
Windows中的"第一次机会异常"不是C++异常,这意味着运行时系统检测到程序的非法行为,例如取消引用无效指针。事实上,"读取位置0x00bb0000的访问冲突"在很大程度上表明这就是正在发生的事情。
取消引用无效指针不一定会在不同的系统上,甚至在同一台机器上的不同运行中导致相同的行为:有关这方面的更多信息,请参阅Windows中的C代码崩溃之类的问题,但在Linux中则不然。在这种情况下,故障似乎发生在GL实现内部,但这可能是由于早期的应用程序代码向其提供了错误信息造成的。
检查所有启用的顶点阵列是否至少具有n_data
元素。(要特别小心,确保它们不只有n_data - 1
元素,并且n_data
包含您期望的值。)您还应该检查以前传递给GL函数的任何指针是否有效。还有更多的GL状态需要检查,但这将是我的第一个猜测。
- 将应用程序从32位移植到64位时出现问题
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 浮点数为 32 位和 64 位二进制表示形式
- 如何在 64 位平台上计算 32 位哈希C++?
- 将代码从 32 位迁移到 64 位时出现问题 Visual Studio 2010
- 我把我的编译器从32位转换为64位,但我仍然不能使用超过2GB:(为什么
- 在node-gip binding.gyp文件中,如何根据系统结构(32位、64位)包含不同的库文件
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 是否可以使用 Wojciech Mula 算法将 __m256i 个 32 位字而不是 4 个 64 位字存储为弹出计数和结果?
- 将 VS 32 位项目转换为 64
- EDSDK 3.6 macOS - 32 位与 64 位和链接错误
- 如何将C++项目从 32 位迁移到 64 位以支持 MAC OS 10.14(莫哈韦)?
- 将 64 位整数中的每个其他位与 32 位整数进行比较
- 32位到64位:LNK2019错误,如何检索相关信息
- 在QtMultimedia的QAudioFormat中为24位,32位和64位音频选择哪种样本类型(而不是大小)?
- C/C++ 在 32 位和 64 位计算机上可执行
- 在 64 位 Linux armv8 计算机上编译 32 位二进制文件时遇到问题
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 在 VS 移位中,UINT64 上的左移(64 >移位> 32)位仅 32 位