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

プロファイラーを使用すると、ライブ バイトは常に 10 MB をはるかに下回り、メモリ警告が発生すると 3 MB 以下に戻ります。

このステートメントは 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 に答える