0

ここで欠けているものを追跡しようとしています。

CentOs5 で動作しています。

これを単純な単純なプログラムに煮詰めましたが、それでもメモリリークが発生します。これが Valgrind のバグなのか、libobjc のバグなのかはわかりません。

main.m

int main(){return 0;}

そして、それをコンパイルしてgccでリンクします

gcc main.m -o main -lobjc

実行するvalgrind mainとメモリリークが発生します

==27005== HEAP SUMMARY:
==27005==     in use at exit: 8,485 bytes in 133 blocks
==27005==   total heap usage: 145 allocs, 12 frees, 11,053 bytes allocated
==27005==
==27005== LEAK SUMMARY:
==27005==    definitely lost: 16 bytes in 1 blocks
==27005==    indirectly lost: 16 bytes in 1 blocks
==27005==      possibly lost: 0 bytes in 0 blocks
==27005==    still reachable: 8,453 bytes in 131 blocks
==27005==         suppressed: 0 bytes in 0 blocks

libobjc をリンクしない (-lobjc を除外する) と、メモリ リークは発生しません。

アイデア?

4

2 に答える 2

0

たぶんあなたのcentOSにlibobjcはありませんか?Mountain Lionでコードをビルドして実行しますが、警告やエラーはありません。

于 2012-08-31T01:29:33.093 に答える
0

うーん...宣言されたObjective-Cクラスごとにメモリが割り当てられているようです。そのため、libobjc をリンクすると、これらのクラスを使用しているかどうかに関係なく、実行時にこれらのクラスの一部が初期化されます。クラスの初期化コストは1回限りのコストのように見えるので、プログラムの最後にメモリが解放されていない間、メモリを割り当てる必要があるため、実際には私を傷つけるリークではないと思いますとにかく、プログラムの全長。

それでもちょっと面倒くさいけど。アプリが終了する前にそのメモリを解放できたらいいのにと思います。

于 2012-09-01T01:59:21.423 に答える