Вальгринд говорит мне это:
==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
заявления. Как я могу узнать, какой из них вызывает утечку (то есть линия)?
Спасибо!
П.С .: Я бы с удовольствием выложил код, но он слишком длинный: /
Проходить -g
возможность gcc
или же g++
так что в вашем исполняемом файле есть символ отладки. Вот пример запуска valgrind в двоичном формате с -g.
==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
Таким образом, вы можете увидеть линию, в которой было выполнено распределение.
Других решений пока нет …