zot0 Temat założony przez niniejszego użytkownika |
Shutting down Allegro due to signal #11 » 2012-02-07 20:38:16 Witam mam problem odnośnie tworzenia gier w allegro 4.2 [NetBeans 7,1||LINUX Ubuntu||] dodane: liballeg-4.2.2.so #include <allegro.h>
#define mx 1024 #define my 768
const int color1 = 0x555555; const int color2 = 0x0;
int i;
void init_1( BITMAP * ini1 );
int main( int argc, char ** argv ) { allegro_init(); install_keyboard(); install_mouse(); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, mx, my, 0, 0 ); set_palette( default_palette ); BITMAP * bufor = create_bitmap( mx, my ); while( !key[ KEY_ESC ] ) { clear_to_color( bufor, 0xdddddd ); init_1( bufor ); show_mouse( bufor ); blit( bufor, screen, 0, 0, 0, 0, mx, my ); } allegro_exit(); return 0; } END_OF_MAIN();
void init_1( BITMAP * ini1 = NULL ) { rectfill( ini1, 0, 0, mx, my / 12, color1 ); rectfill( ini1, 0, my, mx, my -(( my / 12 ) * 2 ), color1 ); for( i = 0; i <= 12; i++ ) line( ini1, 0, i *( mx / 16 ), mx, i *( mx / 16 ), color2 ); for( i = 0; i <= 16; i++ ) line( ini1, i *( my / 12 ), 0, i *( my / 12 ), my, color2 ); }
Problem leży w tym ,że jak uruchomię to coś to po kilku sekundach program zamyka się i wyskakuje mi komunikat: Shutting down Allegro due to signal #11
RUN FAILED (exit value 1, total time: 7s)
zależy mi aby rysować po bitmapach w funkcjach, albo jeszcze lepiej w klasie. Pytanie czy błąd leży po stronie kodu czy w konfiguracji allegro? |
|
pekfos |
» 2012-02-07 20:41:21 Problem jest w kodzie. 11 to nic innego jak SIGSEGV. Naruszenie ochrony pamięci. Użyj debuggera. |
|
zot0 Temat założony przez niniejszego użytkownika |
» 2012-02-07 20:50:04 Debuger poinformował mnie o tym właśnie co mówisz "SIGSEGV" i wyświetlił takie coś: raise+53: cmp $0xfffffffffffff000,%rax raise+59: ja 0x7ffff771b3bf <raise+79> raise+61: repz retq raise+63: nop raise+64: test %eax,%eax raise+66: jg 0x7ffff771b395 <raise+37> raise+68: test $0x7fffffff,%eax raise+73: je 0x7ffff771b3d0 <raise+96> raise+75: neg %eax raise+77: jmp 0x7ffff771b395 <raise+37> raise+79: mov 0x361a52(%rip),%rdx # 0x7ffff7a7ce18 raise+86: neg %eax raise+88: mov %eax,%fs:(%rdx) raise+91: or $0xffffffffffffffff,%rax raise+95: retq raise+96: mov %esi,%eax raise+98: jmp 0x7ffff771b395 <raise+37> killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: nop killpg+0: test %edi,%edi killpg+2: js 0x7ffff771b3f0 <killpg+16> killpg+4: neg %edi killpg+6: jmpq 0x7ffff771b680 <kill> killpg+11: nopl 0x0(%rax,%rax,1) killpg+16: mov 0x361a21(%rip),%rax # 0x7ffff7a7ce18 killpg+23: movl $0x16,%fs:(%rax) killpg+30: mov $0xffffffff,%eax killpg+35: retq 0x00007ffff771b404: nop 0x00007ffff771b405: nop 0x00007ffff771b406: nop 0x00007ffff771b407: nop 0x00007ffff771b408: nop
niestety nic z tego nie rozumiem... * pokazuje mi jakiś wskaźnik 280MB / 350,4MB i wtedy się sypie niestety nie wiem do czego to się odwołuje w linuxie, SWAP ? możliwe,że jest za mało pamięci wymiany dostępnej? |
|
ison |
» 2012-02-07 21:06:01 możliwe,że jest za mało pamięci wymiany dostępnej?
|
to sprawdź w kodzie czy się udało utworzyć bitmapę ;) |
|
zot0 Temat założony przez niniejszego użytkownika |
» 2012-02-07 21:20:02 sprawdziłem, BITMAPY wczytują się normalnie. Problem leży w tej części. kiedy nie rysuje tych prostokątów nie wyłącza się. Co jest źle w tym zapisie ? rectfill( ini1, 0, 0, mx, my / 12, color1 ); rectfill( ini1, 0, my, mx, my -(( my / 12 ) * 2 ), color1 );
mx - szerokość ekranu my - wysokość ekranu |
|
ison |
» 2012-02-07 22:25:27 może jest wymagane aby pierwszy wierzchołek rysowanego prostokąta określał jego górny lewy róg? spróbuj rectfill( ini1, 0, my -(( my / 12 ) * 2 ), mx, my, color1 ); jeśli to nie pomoże, to nie mam pojęcia czemu to wywala sigsegva, u mnie działa ;) pomimo tego, że ta funkcja nie jest w Twoim kodzie nigdy wywoływana z domyślnym argumentem to jednak void init_1( BITMAP * ini1 = NULL ) { rectfill( ini1, 0, 0, mx, my / 12, color1 ); rectfill( ini1, 0, my, mx, my -(( my / 12 ) * 2 ), color1 );
wygląda trochę niebezpiecznie ;) ini1 nie może być nigdy NULL jeśli chcesz po nim rysować |
|
zot0 Temat założony przez niniejszego użytkownika |
» 2012-02-08 19:13:19 fakt ten parametr domyślny jest nie potrzebny. A rysowanie od lewej do prawej niestety nie pomogło. Wygląda na to, że sprawa leży po stronie konfiguracji allegro i netbeans albo w ust. samego systemu.
Sprawdziłem i wyszło mi, że wszystkie funkcje rysujące prymitywy z wypełnieniem sypią program." rectfill circlefill" itd. Jakie mogą być przyczyny od strony konfiguracji ? podkreślam ,że posiadam (Linuxa Ubuntu x86_64) GCC||g++-4.6 allegro4.2.2, Jeszcze jedno pytanie, jest jakieś nowsze allegro 4.x od 4.2.2 może ta wersja nie działa poprawnie ?? |
|
pekfos |
» 2012-02-08 19:20:17 Przykład z kursu Ci działa? |
|
« 1 » 2 |