MrDevilsh Temat założony przez niniejszego użytkownika |
[ALLEGRO, C++] Błąd przy zakończeniu aplikacji » 2011-09-22 23:32:02 Witam! Jakoż ze jest to mój pierwszy post. Ale do rzeczy. Uczę się C++ od początku wakacji, biblioteki Allegro od jakiegoś czasu i napisałem w niej Kółko i Krzyżyk. Sama gra działa poprawnie, lecz kiedy przychodzi zakończenie programu, w kompilatorze wyrzuca błąd i otwiera mi się jakiś dodatkowy plik. Natomiast kiedy odpalam przez "*.exe" mówi mi że "Przestało działać". Jeżeli ktoś by miał chwilkę czasu i spojrzałby co jest nie tak, byłbym wdzięczny :)
|
|
DejaVu |
» 2011-09-22 23:40:58 Obok exe zapewne nie masz plików *.dll allegro więc się aplikacja wykłada przy uruchomieniu. Co do tego drugiego błędu to zapewne zwalniasz gdzieś 2x tą samą grafikę... |
|
akwes |
» 2011-09-22 23:41:03 1. W czym piszesz program? Borland i Visual wywalają dodatkowy plik wtedy kiedy została źle użyta funkcja bądź został złapany jakiś wyjątek (np. przekroczenie zakresu w string, przekroczenie zakresu iteratora) z plikiem nagłówkowym danej biblioteki z zaznaczoną funkcją, która krzyczy.
2. Powiedz jaki plik Ci się otwiera i jakiej treści masz komunikat, żeby sprawdzić Twoją grę w allegro osoby które nie piszą w allegro musiałby instalować tę bibliotekę a kto wie, może uda się pomóc bez tego ;)
3. Sprawdzałeś program Debuggerem ? |
|
MrDevilsh Temat założony przez niniejszego użytkownika |
» 2011-09-23 07:21:23 Nie wyjaśniłem do końca, program wywala błąd przy zakończeniu. Kompiluje, uruchamia się i działa poprawnie. Pisałem to w Microsoft Visual C++ 2010 Express. Wspominałem że nawet jak uruchomię nawet przez kompilator, na końcu, czyli po zakończeniu pracy programu(po skończeniu gry) wyrzuca błąd i są trzy opcje m.in. "Break". "*.exe" tak samo działa, po wygranej, kiedy program ma się wyłączyć "Przestaje działać". Przenoszenie "*.exe" na inny komputer to już inna kwestia, ale uruchamiałem to u siebie.
//edit Również sprawdziłem kod, nie napisałem niszczenia 2x tej samej grafiki. I plik który się otwiera to "free.c". Jak się otworzy, zaznaczone jest zieloną strzałką "retval = HeapFree(_crtheap, 0, pBlock);"
Błąd, który wyskakuje: "Unhandled exception at 0x10092017 in Allegro - TicTacToe(nazwa projektu): 0xC0000005: Access violation reading location 0xfeefefe." |
|
akwes |
» 2011-09-23 10:15:40 Access violation reading location 0xfeefefe. |
Czyli gdzieś przekraczasz zakres albo usuwasz coś czego nie ma, jak pisał DejaVu. Ewentualnie odczytujesz coś czego nie ma. Piszesz coś na ekranie na zakończenie? Wyświetlasz jakąś grafikę na koniec? Masz tam jakieś wskaźniki a konkretnie to wskaźniki współdzielone? Albo inaczej jeszcze. Używasz kiedykolwiek delete w programie? Bo może kasujesz obiekt lokalny? |
|
MrDevilsh Temat założony przez niniejszego użytkownika |
» 2011-09-23 14:33:43 Na końcu programu wyskakuje okienko z informacją kto wygrał lub kiedy jest remis(za pomocą allegro_message();). Potem niszczy się bitmapa kółka i krzyżyka i to całość co jest na koniec. Choć wiem do czego delete służy nie używałem go to tego projektu, nie czułem po prostu takiej potrzeby. BITMAP * bufor = create_bitmap( 640, 480 ); BITMAP * krzyzyk = load_bitmap( "x.bmp", default_palette ); BITMAP * kolko = load_bitmap( "o.bmp", default_palette );
Gra.SprawdzenieObrazka( krzyzyk ); Gra.SprawdzenieObrazka( kolko );
while( !Done ) { show_mouse( bufor ); while( speed > 0 ) { if( key[ KEY_ESC ] ) Done = true; Gra.PolaGry( Tablica, kolej, Ruch, Pole1, Pole2, Pole3, Pole4, Pole5, Pole6, Pole7, Pole8, Pole9 ); Gra.Wygrana( Tablica, Win, Draw, Ruch ); if( Win == true ) Done = true; else if( Draw == true ) Done = true; speed--; } Rysuj.RysujPlansze( bufor ); Rysuj.RysujZnaczek( bufor, krzyzyk, kolko, Tablica ); Rysuj.KopiujCalosc( bufor ); clear_to_color( bufor, makecol( 0, 128, 128 ) ); }
destroy_bitmap( krzyzyk ); destroy_bitmap( kolko ); destroy_bitmap( bufor ); allegro_exit(); } END_OF_MAIN();
To tylko wycinek kodu, wyżej jest jeszcze co innego, zlinkowałem w pierwszym poście całą paczke. |
|
DejaVu |
» 2011-09-23 14:50:15 |
|
MrDevilsh Temat założony przez niniejszego użytkownika |
» 2011-09-23 15:00:58 O dziwo kiedy zmieniłem z "show_mouse(bufor)" na "show_mouse(screen)", nie wywala błąd na końcu ale kursor zaczął migać tak jak grafika kiedy nie zastosowało się podwójnego buforowania. |
|
« 1 » 2 |