ThudPoland |
» 2011-03-05 12:03:35 Czy ten drugi kod jest gdzieś zagnieżdzony - tzn. w jeszcze innej pętli, bo nie wiem jak ustosunkować się do opisu. Jeżeli tak to strasznie dużo zmiennych lokalnych walisz w pętli, co już mi się nie podoba. |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-03-05 12:27:29 Ten drugi kod jest zawarty w funkcji składowej mojej własnej klasy "mapa". Oto definicja tej funkcji: void mapa::rysuj( background & t1, background & t2, background & t3, DATAFILE * kafelki, DATAFILE * wrog, BITMAP * bufor ) { 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; t1.rysuj( 0, bufor ); t2.rysuj( MAPA_SZERPIX - 1280, bufor ); int bx = ekr_x *( EKRAN_SZER - 1280 ) /( EKRAN_SZER - MAPA_SZERPIX ); t3.rysuj( bx, bufor ); 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 ); } } END_OF_FUNCTION( rysuj ); |
|
ThudPoland |
» 2011-03-05 12:29:36 A czy wywołanie tej funkcji jest zapętlone? |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-03-05 12:40:10 A czy wywołanie tej funkcji jest zapętlone? |
Wywołanie tej funkcji mieści się w głównej pętli gry. |
|
malan |
» 2011-03-05 13:17:13 @mar3: Ja czegoś tu nie rozumiem. Masz log, który ujawnił sześć wycieków pamięci w Twoim programie. Masz podany numer wiesza oraz plik, w którym alokowana jest (dynamicznie) pamięci. Czemu więc analizujesz pętle? Zajmij się tym co masz w logu. int main() { int * a = new int; * a = 69; int * b = new int; * b = 666; _CrtDumpMemoryLeaks(); return 0; } Log: Detected memory leaks! Dumping objects -> c:\...\visual studio 2010\projects\memoryleak\memoryleak\memoryleak.cpp(11) : {57} normal block at 0x00151560, 4 bytes long. Data: < > 9A 02 00 00 c:\...\visual studio 2010\projects\memoryleak\memoryleak\memoryleak.cpp(8) : {56} normal block at 0x00151520, 4 bytes long. Data: <E > 45 00 00 00 Object dump complete.
Widzę - aha, czyli nie zwalniam czegoś, co jest w linii 11. Specjalistą od tego nie jest, mogę się mylić, ale ja bym postępował w tym kierunku. |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-03-05 13:57:26 Tylko, że mi wyskakuje coś takiego: Detected memory leaks! Dumping objects -> {745} normal block at 0x053BFC08, 504 bytes long. Data: < > 00 00 00 00 C0 01 00 00 02 00 00 00 20 00 00 00 {742} normal block at 0x053C4FB0, 20 bytes long. Data: < > 7F 01 00 00 AA 01 00 00 20 00 18 00 00 00 00 00 {141} normal block at 0x006D4E00, 256 bytes long. Data: <YMm > 59 4D 6D 00 00 00 00 00 CD CD CD CD CD CD CD CD {140} normal block at 0x006D4D58, 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 0x006D4D10, 8 bytes long. Data: < > 9C D3 1C 01 00 00 00 00 {138} normal block at 0x006D4CC8, 8 bytes long. Data: < > 88 D3 1C 01 00 00 00 00 Object dump complete. Plik main.cpp ma 177 wierszy. Nie korzystam z operatora new. |
|
malan |
» 2011-03-05 14:18:39 Aha. Więc zapodaj całym kodem jeżeli to nie problem ;p |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-03-05 14:40:16 Tutaj macie spakowany do pliku .rar folder projektu Visual C++ Express Edition 2010 ze wszystkimi plikami źródłowymi. |
|
1 « 2 » 3 4 |