1

私のObjective Cプログラムにバグがあり、一部のライブラリメソッドでマシンが深くクラッシュします。これは、スタックからメインまでのすべてのライブラリメソッドです(XCodeから提供されたものからは触れていません)。だから、私は少し謎を抱えています。

私が得ているエラーは次のとおりです。

Program received signal:  “EXC_BAD_ACCESS”.

さて、これはどこかで何かを何度もリリースしていること、またはそのようなことを意味していると確信しています。これは、セグ フォールトの客観的 C バージョンですよね?

私の質問は次のとおりです。自分のコードでは発生していないため、二重リリースしているものを追跡する賢い方法はありますか? それともコード検査が最善の策ですか?

ありがとう。

4

1 に答える 1

2

EXC_BAD_ACCESS基本的に、予期しない方法で特定のメモリ チャンクにアクセスまたは使用しようとしていることを意味します。たとえば、有効なオブジェクトをもはや表していないメモリ参照にメッセージを送信しようとするとします。セグメンテーション違反とは異なりますが、関連しています。

過剰にリリースされたオブジェクトのデバッグに関する提案については、この関連する SO の質問を参照してください。NSZombie はあなたに驚くべき効果をもたらします。Snow Leopard を手に入れたら (今週の金曜日に手に入れる予定ですよね?)、Zombies インストゥルメントを使用してプロセスを簡素化し、Xcode 静的アナライザーを使用してコンパイル時にそのようなエラーを見つけることができます。

http://www.cocoadev.com/index.pl?DebuggingTechniquesおよびこの Apple Tech Noteも参照してください。

于 2009-08-24T20:56:58.200 に答える