Piszę pełnoekranową grę w VS C++ Express 2010 na win 7 pro x64. Za każdym razem kiedy wyłączam tą moją grę to zmieniają się ikony (na pasku zadań) otwartych programów na ikony innych programów. Pomyślałem, że to może wina wycieków pamięci. Postąpiłem tak jak w tym artykule.
Detected memory leaks!
Dumping objects ->
{745} normal block at 0x05827F00, 504 bytes long.
Data: < > 00 00 00 00 C0 01 00 00 02 00 00 00 20 00 00 00
{742} normal block at 0x058225F0, 20 bytes long.
Data: < > A6 01 00 00 AA 01 00 00 20 00 18 00 01 00 00 00
{141} normal block at 0x004F4DE0, 256 bytes long.
Data: <9MO > 39 4D 4F 00 00 00 00 00 CD CD CD CD CD CD CD CD
{140} normal block at 0x004F4D38, 107 bytes long.
Data: <"C:\Users\Marcin> 22 43 3A 5C 55 73 65 72 73 5C 4D 61 72 63 69 6E
{139} normal block at 0x004F4CF0, 8 bytes long.
Data: < - > 9C D3 2D 01 00 00 00 00
{138} normal block at 0x004F4CA8, 8 bytes long.
Data: < - > 88 D3 2D 01 00 00 00 00
Object dump complete.
Przeglądałem kod tej swojej gry już kilka razy i nie mogę znaleźć błędu. Czy jest jakiś sposób na dowiedzenie się w których linijkach kodu występuje wyciek? Może jest jakiś specjalny program?
Cytuję ze strony, którą podałeś:
"Kojelnym mykiem jaki warto zastosować to dodanie następującego wiersza w naszym programie:
C/C++
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)"
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
Z resztą nie korzystam z operatora new. A plik main.cpp ma tylko 176 wierszy, a tam przecież już w pierwszej linii piszę {745}. Dla wszystkich bitmap wywołuję funkcję destroy_bitmap() oraz dla wszystkich wczytanych plików .dat wywołuje funkcję unload_datafile() (Korzystam z biblioteki Allegro).
A co do tego linka, którego podałeś to czy nie mógłbyś dać do czegoś po Polsku?
Dziękuje za pomoc. Wreszcie mi się udało.
1) Wrzuciłem cały kod z maina (prócz _CrtDumpMemoryLeaks();) w sztuczny blok
2) Do pisałem wywołanie funkcji _cexit(); przed wywołaniem _CrtDumpMemoryLeaks();