EXEC_BAD_ACCESS

2011-04-27 07:43

というわけで最近iOSでごりごり何か作っているわけだが。

長年Javaでいいかげんなことばかりしていたので、やたらとEXEC_BAD_ACCESSという文字を見る。それしか言ってくれないので困る。

こういうときはGoogle先生にお伺いをたてる。するといろいろなサイトに

NSDebugEnabledとNSZombieEnabledとMallocStackLoggingをYESにしておきます。

と書いてあるが、やり方がXcode3以前用のものばかり。Xcode4ではどうやるの、と少し迷ったのでGoogle先生の目の届くところに書いておく。

メニューバーからProduct->Edit Schemeを選ぶ。
表示されたダイアログの中では、Run(アプリ名)がハイライトされている。
Argumentタブの中のEnvironment Variablesから+ボタンを押して前記の変数を追加する。

さて、実行してみよう。画面下部のgdbのエリアに

message sent to deallocated instance

となっている。そのmemory addressをコピーして、gdbのプロンプトの後に

info malloc-history

と打ち込む。するとそのアドレスがどのようにアクセスされたかが表示されるので、どこが悪いかなんとなくわかる。