1

開発中の iOS アプリを実行しようとすると、次のエラーが発生します。

appname(6097,0x3e835d98) malloc: *** error for object 0x20104600: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

free()このエラーを生成した呼び出しを確認するにはどうすればよいですか? にブレークポイントを追加するとmalloc_error_break、取得するスタック トレース全体が " malloc_error_break" への呼び出しになり、次のようになります。

libsystem_c.dylib`malloc_error_break:
0x32f20fa8:  push   {r7, lr}                           < Thread 1: breakpoint 1.1
0x32f20faa:  mov    r7, sp
0x32f20fac:  nop    
0x32f20fae:  nop    
0x32f20fb0:  pop    {r7, pc}
0x32f20fb2:  nop    

にブレークポイントを追加しないとmalloc_error_break、同様に役に立たないスタック トレースが得られますが、今回は__pthread_killと アセンブラ命令だけです。

このエラーを生成したコードについてより良いアイデアを得るために他にできることはありますか?

4

1 に答える 1

1

main次の方法で「Test」という新しいプロジェクトを作成しました。

void* data = malloc(100);    
free(data);
free(data);

次に、「Product->Edit Scheme」を開き、「Test.app」タブをクリックして、「Diagnostics」をクリックします。次に、「Guard Malloc を有効にする」を選択します。

ここで、アプリケーションを実行すると、2 番目にブレークが発生しfreeます。

于 2012-06-10T19:38:47.593 に答える