gpt4 book ai didi

c++ - 异常代码 "EXC_I386_GPFLT"是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 11:53:16 25 4
gpt4 key购买 nike

异常代码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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com