[C++] Segmentation fault i vector
Ostatnio zmodyfikowano 2012-01-29 15:02
| 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..  if( Przycisk.Click( 1 ) ){
 dodac = true;
 idd = atoi( TBdodajTileID.GetText().c_str() );
 
 for( int i = 0; i < tiles.size(); i++ )
 {
 if( idd == tiles[ i ].ID )
 {
 cout << "\nPodane ID juz istnieje!\n";
 dodac = false;
 break;
 }
 }
 
 if( dodac )
 {
 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 );
 
 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ć? | 
|  | 
| DejaVu | » 2012-01-29 14:06:17 {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... | 
|  | 
| 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. class CTile{
 public:
 
 ALLEGRO_BITMAP * img;
 int ID;
 
 };
 
 vector < CTile > tiles;
 
Wcześniej zrobiłem coś w stylu: 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. | 
|  | 
| DejaVu | » 2012-01-29 14:11:58 cout << "\n\t" << sc << "  o ID: " << idd << "\n";
A ta linijka wypisuje coś zanim się wysypie aplikacja?
 /edit:
 No i popraw logi:
 cout << "\nDODANO (" << t.img << ")\n";
 | 
|  | 
| 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.
 
 | 
|  | 
| 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 :) | 
|  | 
| 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.. | 
|  | 
| 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. | 
|  | 
| « 1 »  2 |