Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, Allegro]Wykrywanie wycieków pamięci

Ostatnio zmodyfikowano 2011-03-07 22:10
Autor Wiadomość
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.
P-28877
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:
C/C++
void mapa::rysuj( background & t1, background & t2, background & t3, DATAFILE * kafelki, DATAFILE * wrog, BITMAP * bufor )
{
    tabKafli.clear();
   
    int map_x = ekr_x / KAFEL_SZER; //Przeliczenie współrzędnych ekranu
    int map_y = ekr_y / KAFEL_WYS; //na współrzędne w tablicy mapy
    int off_x = ekr_x % KAFEL_SZER; //z uwzględnieniem małego
    int off_y = ekr_y % KAFEL_WYS; //przesunięcia względem ekranu
   
   
    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 );
P-28880
ThudPoland
» 2011-03-05 12:29:36
A czy wywołanie tej funkcji jest zapętlone?
P-28881
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.
P-28882
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.

C/C++
int main()
{
    int * a = new int;
    * a = 69;
   
    int * b = new int;
    * b = 666;
   
    //delete b;
    //delete a;
   
    _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ę
...\memoryleak.cpp(11)
- 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.
P-28883
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.
P-28884
malan
» 2011-03-05 14:18:39
Aha. Więc zapodaj całym kodem jeżeli to nie problem ;p
P-28885
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.
P-28886
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona