7

ポインターを解放しすぎると、次のようなエラーが表示される場合があります。

「解放されるポインタは割り当てられませんでした」

シミュレーターでデバッグするとき、ビルド引数 MallocStackLogging = YES を追加します。これにより、ターミナルで malloc_history を使用して、ポインターを解放しすぎた場所を追跡できます。

このビルド引数を使用してデバイスでデバッグすると、「スタック ログ ファイルを作成できません」など、あらゆる種類のコンソール エラーが発生します。

奇妙なことに、シミュレーターではなく、デバイスで解放されたポインターエラーが表示されます。

デバイス自体を使用してこれらを追跡した経験のある人はいますか?

ありがとう!

4

4 に答える 4

9

これを行う別の方法。NSZombie をオンにして、余分な解放を取得しているオブジェクトのメモリ アドレスを報告するようにしてください。次に、Performance Tool->Object Allocations で実行します。これにより、インストゥルメントが表示されます。Xcodeオーガナイザーから提供されたコンソールログを見てください。クラッシュ ルックアップを取得したら、instrument のメモリ アドレスを取得します。そのオブジェクトの mallocs/frees の全履歴と、コードへの直接のリンクが表示されます。

于 2009-12-15T20:47:01.943 に答える
1

私は一般的にそのようなことのためにNSZombieを使用します、これをチェックしてください

于 2008-11-17T19:07:27.087 に答える
0

ターゲットの実行可能ファイルに MallocStackLogging 環境変数を設定する必要があります...

これらの設定にアクセスするには、XCode の [グループとファイル] ペインから実行可能ファイルを選択し、[情報を見る] を選択します。

[引数] タブに移動し、[環境に設定する変数] ボックスに次のエントリを追加します。

于 2009-06-11T23:04:49.883 に答える
0

プログラムのメモリ リークをテストしてください。また、自動解放と、オブジェクトが適切に解放されているかどうかも確認してください。また、解放されたオブジェクトにメモリが割り当てられているかどうかも確認する必要があります。自動解放についても注意が必要です。配列、文字列、またはすでに自動解放されているオブジェクトを解放します...それが役に立ち、うまくいくことを願っています!

ヒント: プロジェクトを分析することでリークをテストできます (shift+command+k をクリック)。

于 2012-01-25T07:54:21.087 に答える