1

ヴァルグリンドは私にこう言います:

==19305== 16 bytes in 1 blocks are definitely lost in loss record 19 of 179
==19305==    at 0x402842F: operator new(unsigned int)
==19305==    by 0x805273E: Loader::createLevel(int, int, std::string, Player*, int, int, int) 
==19305==    by 0x80551B0: Loader::loadLevel()
==19305==    by 0x80676C2: main (main.cpp:38)

私の関数Loader:.createLevelにはいくつかのnewステートメントがあります。それらのどれがリークを引き起こしているか (つまり、ライン) をどのように知ることができますか?

ありがとう!

PS: 喜んでコードを投稿しますが、長すぎます :/

4

1 に答える 1

3

-gオプションをgccorに渡しg++て、実行可能ファイルにデバッグ シンボルが含まれるようにします。-g を使用してバイナリで valgrind を実行する例を次に示します。

==20538== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==20538==    at 0x4A05809: malloc (vg_replace_malloc.c:149)
==20538==    by 0x4004F7: main (test.c:8)
==20538==
==20538== LEAK SUMMARY:
==20538==    definitely lost: 4 bytes in 1 blocks.
==20538==      possibly lost: 0 bytes in 0 blocks.
==20538==    still reachable: 0 bytes in 0 blocks.
==20538==         suppressed: 0 bytes in 0 blocks.
==20538== Reachable blocks (those to which a pointer was found) are not shown.
==20538== To see them, rerun with: --show-reachable=yes

gcc -g test.c

このようにして、割り当てが行われた行を確認できます。

于 2012-09-25T03:20:41.617 に答える