私はメモリリークを探すためにvalgrindを実行しています。私は、main関数に2つのグローバル変数alloc'dを持っています。そして、main
の終わりに私は両方の解放が、Valgrindのは書き込み続けて:私はこれらの2つの変数を解放することができないのはなぜValgrindとグローバル変数
==18311== LEAK SUMMARY:
==18311== definitely lost: 32 bytes in 2 blocks
==18311== indirectly lost: 0 bytes in 0 blocks
==18311== possibly lost: 0 bytes in 0 blocks
==18311== still reachable: 0 bytes in 0 blocks
==18311== suppressed: 0 bytes in 0 blocks
:
==18311== 16 bytes in 1 blocks are definitely lost in loss record 1 of 2
==18311== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==18311== by 0x804A30C: main (application.c:730)
==18311==
==18311== 16 bytes in 1 blocks are definitely lost in loss record 2 of 2
==18311== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==18311== by 0x804A31D: main (application.c:731)
リークの概要を?
編集
someList *something; *something_else;
使用構造体はタイプchar *
の二つのフィールドとフィールドsomeList *next
を持っています。 後で多くのコードがあります。いくつかのスレッドは、この2つの変数を使用してオブジェクトの追加/編集/削除を行います。
->
は
something->next = object 1
、および
object k
は
someList *
のすべてのインスタンスであることを意味
something -> object 1 -> ... -> object n
something_else -> object 1 -> ... -> object m
。
アプリケーションの最後に、私は各object k
要素のすべてのフィールドを解放しました。その後、最後の部分:
free(something);
free(something_else);
オブジェクトのフィールドを解放するのを忘れた可能性があります。これは私がここにいる行動を引き起こすことができますか?
今はっきりしていることを願っています。
無料のコードの部分は実行されていますか?メイン関数からの早期復帰はスキップすることがあります。 – CodesInChaos
コードを見る必要があります。 – SoapBox
@CodeInChaos yes:コードが実行されます。とにかくありがとう。 – Donovan