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

[C++] Segmentation fault i vector

Ostatnio zmodyfikowano 2012-01-29 15:02
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
[C++] Segmentation fault i vector
» 2012-01-29 13:40:40
Przejdę od razu do rzeczy: po dodaniu 4 elementu do vector, aplikacja sie wywala :) Przy debugowaniu wyszło, że otrzymuje segmentation fault..
C/C++
if( Przycisk.Click( 1 ) )
{
    dodac = true;
    idd = atoi( TBdodajTileID.GetText().c_str() ); // wpisane ID do texboxa
   
    for( int i = 0; i < tiles.size(); i++ )
    {
        if( idd == tiles[ i ].ID )
        {
            cout << "\nPodane ID juz istnieje!\n";
            dodac = false;
            break;
        }
    }
   
    if( dodac ) // takie ID nie istnieje, czyli mozna dodac element
    {
        CTile t;
        string sc = TBdodajTile.GetText() + ".bmp";
        cout << "\n\t" << sc << "  o ID: " << idd << "\n";
        t.img = al_load_bitmap( sc.c_str() );
        t.ID = idd;
       
        tiles.push_back( t ); //bez tego aplikacja sie nie wywala
       
        cout << "\nDODANO\n";
    }
}
I nie mam pojęcia co jest nie tak.. Zawsze przy dodaniu 4 elementu aplikacja się sypie. Ścieżka itd jest poprawna. O co może chodzić?
P-49742
DejaVu
» 2012-01-29 14:06:17
C/C++
{
    CTile t;
    t.img = al_load_bitmap( sc.c_str() );
    t.ID = idd;
}
Jeżeli w destruktorze CTile masz zwalnianie t.img to aplikacja i tak nie będzie działała dobrze...
P-49746
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2012-01-29 14:09:45
Destruktora nie mam, jedynie przy wyłączeniu aplikacji "sprzątam" bitmapy.
C/C++
class CTile
{
public:
   
    ALLEGRO_BITMAP * img;
    int ID;
   
};

vector < CTile > tiles;


Wcześniej zrobiłem coś w stylu:
C/C++
tiles.push_back( CTile(..) );
lecz nie działało dobrze (tj. tak samo jak teraz), więc zmieniłem na obecną formę, bez żadnego rezultatu.
P-49747
DejaVu
» 2012-01-29 14:11:58
C/C++
cout << "\n\t" << sc << "  o ID: " << idd << "\n";
A ta linijka wypisuje coś zanim się wysypie aplikacja?

/edit:
No i popraw logi:
C/C++
cout << "\nDODANO (" << t.img << ")\n";
P-49748
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2012-01-29 14:13:11
Tak, wypisuje ona wszystko dobrze. Zresztą
cout << "\nDODANO\n";
 też się wypisuje (oba napisy dałem specjalnie do testów).


        media/tiles/test.bmp  o ID: 1

DODANO

        media/tiles/test.bmp  o ID: 2

DODANO

        media/tiles/test.bmp  o ID: 3

DODANO

        media/tiles/test.bmp  o ID: 4

DODANO

Process returned -1073741819 (0xC0000005)   execution time : 13.313 s
Press any key to continue.
P-49749
DejaVu
» 2012-01-29 14:15:03
@up: przeczytaj to co jeszcze w edicie napisałem - może po prostu bitmapy nie udało się załadować i na niej pracujesz :)
P-49750
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2012-01-29 14:19:39
Niestety to nie to :) Adres jest przydzielany, a po za tym, w dalszej części kodu, gdybym chciał wyświetlić sobie bitmapy z vector, to działa to poprawnie..
P-49752
DejaVu
» 2012-01-29 14:26:41
        media/tiles/test.bmp  o ID: 4

DODANO
Skoro dodanie się powiodło to znaczy, że to nie ten kod się składa. Skoro masz sprawny debugger to użyj callstacka gdy się aplikacja wywaliła i ustal miejsce zgonu.
P-49754
« 1 » 2
  Strona 1 z 2 Następna strona