- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
异常代码EXC_I386_GPFLT
是什么意思?
它的含义是否因情况而异?
在这种情况下,我指的是异常类型 EXC_BAD_ACCESS
和异常代码 EXC_I386_GPFLT
程序是在Xcode 5.0.1开发的,处理的是BLAS库的cblas_zgemm()
。(嗯,我想没关系……)
非常感谢!
最佳答案
EXC_I386_GPFLT 肯定是指“一般保护错误”,这是 x86 告诉您“您做了不允许做的事情”的方式。这通常并不意味着您访问超出内存范围,但可能是您的代码超出范围并导致以某种方式使用错误的代码/数据,从而导致某种保护违规。
不幸的是,如果没有更多的上下文,可能很难准确找出问题所在,我的 AMD64 程序员手册,2005 年第 2 卷中列出了 27 个不同的原因 - 众所周知,8 年后可能会又加了几个。
如果是 64 位系统,可能的情况是您的代码使用“非规范指针”——这意味着 64 位地址的形成方式是地址的高 16 位并非低 48 位的顶部的所有拷贝(换句话说,基于 16 位以下的位,地址的顶部 16 位应该全部为 0 或全部为 1)。这条规则是为了保证架构可以“安全地扩展地址范围内的有效位数”。这表明代码要么用其他东西覆盖了一些指针数据,要么在读取一些指针值时超出了范围。
另一个可能的原因是对 SSE 寄存器的未对齐访问 - 换句话说,从非 16 字节对齐的地址读取 16 字节 SSE 寄存器。
正如我所说,还有许多其他可能的原因,但其中大多数涉及“正常”代码在 32 位或 64 位操作系统中无法执行的操作(例如加载具有无效选择器索引的段寄存器或写入 MSR(特定于模型的寄存器))。
关于c++ - 异常代码 "EXC_I386_GPFLT"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19651788/
我是一名优秀的程序员,十分优秀!