0

绝对是内存崩溃,还是我应该寻找其他东西?

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x81093cd0
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x33563f78 objc_msgSend + 16
1   Foundation                      0x34d6b92c __NSFireDelayedPerform + 408
2   CoreFoundation                  0x35919a2c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
3   CoreFoundation                  0x35919692 __CFRunLoopDoTimer + 358
4   CoreFoundation                  0x35918268 __CFRunLoopRun + 1200
5   CoreFoundation                  0x3589b49e CFRunLoopRunSpecific + 294
6   CoreFoundation                  0x3589b366 CFRunLoopRunInMode + 98
7   GraphicsServices                0x33636432 GSEventRunModal + 130
8   UIKit                           0x33073cce UIApplicationMain + 1074

使用分析器,实时字节在任何时候都远低于 10MB,当内存警告发生时,我会回到 3MB 或更低。

此语句返回 YES,所以我假设我启用了僵尸:

getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")

当我从 Xcode 运行时,应用程序在 Xcode 没有意识到的情况下崩溃(在任意数量的内存警告之后)。

除了“在启用 NSZombies 的情况下运行”之外还有什么建议吗?而且,这绝对是内存崩溃吗?

4

2 回答 2

2

SIGSEGV 发生在代码尝试访问“不存在”的内存时(即,您尝试使用的地址在您的虚拟地址空间中没有映射)。

造成这种情况的确切原因可能有很多——最常见的是:

  • 使用未(正确)初始化的指针。
  • 走出阵列的尽头。
  • 使用已释放的内存。

请注意,以上所有内容都是“未定义行为”的示例,因此您可能会遇到这样的情况,即您的代码虽然做错了但不会崩溃,但相同的代码在其他情况下确实会出错。

于 2012-12-20T16:48:25.370 回答
1

是的,这是与内存相关的错误(分段错误)。请记住,NSZombies无法捕获每个内存错误。

于 2012-12-20T16:40:58.463 回答