次のコードC++空のプログラムメモリは、
int main(){
return 0;
}
を検討リークIは、Gでそれをコンパイル++とvalgrindの出力を渡します。出力は次のとおりです。
==11752== HEAP SUMMARY:
==11752== in use at exit: 72,704 bytes in 1 blocks
==11752== total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==11752==
==11965== LEAK SUMMARY:
==11965== definitely lost: 0 bytes in 0 blocks
==11965== indirectly lost: 0 bytes in 0 blocks
==11965== possibly lost: 0 bytes in 0 blocks
==11965== still reachable: 72,704 bytes in 1 blocks
==11965== suppressed: 0 bytes in 0 blocks
しかし、gccでCで同じコードをコンパイルすると、このvalgrindの出力を生成します。
==11771== HEAP SUMMARY:
==11771== in use at exit: 0 bytes in 0 blocks
==11771== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==11771==
==11771== All heap blocks were freed -- no leaks are possible
それは空のC++プログラムは、実際にメモリを割り当てないように
をコンパイルするように見えます見えますそれを解放してください(それは "まだ到達可能な"リークですので災害ではありません)。なぜこれが起こっているのかわかりません。
このテストはg ++ 6.3のlinux(solus os)で行いました。
誰かが何が起こっているのか説明できますか?
gcc 4.7.1で再現できませんでした。それはおそらく6.3バージョンのバグで、報告することを検討してください。 – mcrlc
[Valgrind:メモリは依然としてを使用して簡単なプログラムで到達可能です。](http://stackoverflow.com/questions/30376601/valgrind-memory-still-reachable-with-trivial-program-using-iostream) –
cbuchart