2

仕事では、かなり複雑なソフトウェアを C で作成しており、valgrind を使用して頻繁にテストしています。これまでのところ、プログラムはメモリ リークや配列境界違反なしで完全に動作し、valgrind レポートでは、「解放」の数が「malloc」の数と一致しました。私を悩ませているのは、何千もの解放と malloc が報告されていることです。そして、私は実際に、私が約 50 ~ 60 以上のことをしていないことを知っています。私のプログラムが「fopen」を呼び出すと、その呼び出しはvalgrindによってmallocの数にカウントされ、同様に「fclose」は「free」の数にカウントされることを知っています。しかし、私の場合、これは、メモリが何回割り当てられ解放されているかについて私が見ている数字をまだ説明していません。コードを注意深く調べて犯人を探しましたが、何も得られませんでした。できます' 明らかな理由でここにコードを投稿することはできませんが、知りたいだけです。何か不足していますか? valgrind が malloc と free の数にカウントする他の C 操作はありますか?

これが私のvalgrindレポートです。ご覧のとおり、この観点からはすべてがうまく見えます。

Memcheck, a memory error detector
Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
Command: ./Codec
Parent PID: 3526

HEAP SUMMARY:
     in use at exit: 0 bytes in 0 blocks
   total heap usage: 2,407 allocs, 2,407 frees, 28,877,748 bytes allocated

 All heap blocks were freed -- no leaks are possible

 For counts of detected and suppressed errors, rerun with: -v
 ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)
4

2 に答える 2

0

まあ、malloc と free の呼び出しを実行するライブラリ関数を呼び出すと、多くの割り当てと解放が表示されます。一部のライブラリ関数、割り当てを行うシステム コールは、strdup、pthread_create、timer_create などです。

于 2013-10-18T10:11:30.077 に答える