当程序与EXC_BAD_ADDRESS

时间:2016-03-06 17:54:16

标签: swift macos exc-bad-access

我的OSX程序与EXC_BAD_ADDRESS崩溃,代码为EXEC_I386_GPFLT。

我没有任何常见的消息,比如找不到选择器......

该程序之前正在运行,我刚刚更改了调用系统。这是一个自制的热键管理器,我现在使用MASShorcut。

我怀疑是一个线程问题,我想我会用dispatch_xx块解决问题。

所以实际的问题是:EXEC_I386_GPFLT是什么意思?

func saveFile() {
     // crashes on following line
    let savePanel = NSSavePanel(contentRect: NSRect(), styleMask: NSTitledWindowMask, backing: NSBackingStoreType.Buffered, `defer`: true)
    savePanel.canCreateDirectories = true
    ...

The stack trace when it crashes

1 个答案:

答案 0 :(得分:1)

EXEC_I386_GPFLT一般保护错误

这通常意味着你的应用程序尝试取消引用一个地址,这个地址不仅仅是某些不可读的内存部分,而且非常荒谬,并且引用了一些根本不能用于内存的东西(在64位系统上,实际上没有例如,64位可寻址空间,因为某些位在某些上下文中用作元数据。)

鉴于崩溃和调用都在主线程上,它看起来不像是一个线程问题(至少,没有给出证据)。

通常,您使用NSSavePanel()创建一个保存面板。鉴于它在alloc / init中崩溃,我建议采用标准方法创建一个。