[C++, Allegro]Wykrywanie wycieków pamięci
Ostatnio zmodyfikowano 2011-03-07 22:10
mar3 Temat założony przez niniejszego użytkownika |
[C++, Allegro]Wykrywanie wycieków pamięci » 2011-03-04 21:03:30 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. Po skompilowaniu w konsoli ujrzałem: 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? Bardzo proszę o pomoc. |
|
DejaVu |
» 2011-03-04 21:28:46 Jeżeli alokujesz jakieś zasoby to musisz je również zwalniać ;p pewnie jakiegoś obrazu czy czegoś tam innego nie zwalniasz :) |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-03-04 21:39:09 A czy nie ma jednak jakiegoś specjalnego programu? Bo przejrzałem po raz kolejny kod i dla wszystkich bitmap wywołuję funkcję destroy_bitmap() oraz dla wszystkich wczytanych plików .dat wywołuje funkcję unload_datafile(). A niczego nie tworzę przy pomocy operatora new. |
|
malan |
» 2011-03-04 21:46:14 Ustawiłeś głębię kolorów na 32 ( set_color_depth( 32 ); )? |
|
ThudPoland |
» 2011-03-04 21:49:44 Nie wczytujesz czasem jakiśch danych w pętli? |
|
DejaVu |
» 2011-03-04 21:58:48 Specjalny program - Visual C++ to najlepsze środowisko jakie można sobie wyobrazić do pracy - kto dobrze projektuje kod za wczasu ten wycieków pamięci nie zaznaje ;p |
|
Drraven |
» 2011-03-05 09:48:51 Może masz funkcje do wczytywania czegoś i wywołujesz ją w pętli ? sprawdź czy na pewno wszystko z programu usuwasz. ---------- Drraven |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-03-05 11:10:13 Ustawiłeś głębię kolorów na 32 (set_color_depth( 32 );)? |
Miałem ustawione na 16. Zmieniłem na 32 i jest tak samo. Nie wczytujesz czasem jakiśch danych w pętli? |
Wczytuje dane z pliku: string tmpWiersz; tmpWiersz.clear(); getline( wczytaj, tmpWiersz ); short k = 0; short j = 0; short l = 0; while( k < MAPA_SZER * MAPA_WYS ) { if( tmpWiersz[ k ] > 32 && tmpWiersz[ k ] < 48 ) { mapaK[ j ][ l ] = 0; } else { if( tmpWiersz[ k ] > 90 && tmpWiersz[ k ] < 97 ) mapaK[ j ][ l ] =( tmpWiersz[ k ] + 6 ) - 96; else mapaK[ j ][ l ] =( tmpWiersz[ k ] + 49 ) - 96; } short n = k + 1; if(( n % MAPA_SZER ) == 0 ) { j++; l = 0; } else l++; k++; }
wczytaj.close(); oraz rysuje mapę w pętli: tabKafli.clear();
int map_x = ekr_x / KAFEL_SZER; int map_y = ekr_y / KAFEL_WYS; int off_x = ekr_x % KAFEL_SZER; int off_y = ekr_y % KAFEL_WYS;
for( int x = 0; x < MAPA_MAXX + 1; x++ ) { for( int y = 0; y < MAPA_MAXY; y++ ) { if( mapaK[ y + map_y ][ x + map_x ] != 0 && mapaK[ y + map_y ][ x + map_x ] <= 10 ) { kafel kafel1( x * KAFEL_SZER - off_x, y * KAFEL_WYS - off_y, mapaK[ y + map_y ][ x + map_x ], kafelki, bufor ); tabKafli.push_back( kafel1 ); } else if( mapaK[ y + map_y ][ x + map_x ] > 10 ) { enemy wrog1(( x * KAFEL_SZER - off_x ) + ekr_x, y * KAFEL_WYS - off_y, wrog, ekr_x, bufor ); tabWrogow.push_back( wrog1 ); mapaK[ y + map_y ][ x + map_x ] = 0; } } } for( unsigned int i = 0; i < tabWrogow.size(); i++ ) { tabWrogow[ i ].rysuj( ekr_x, bufor ); } |
|
« 1 » 2 3 4 |