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

Shutting down Allegro due to signal #11

Ostatnio zmodyfikowano 2012-02-10 21:08
Autor Wiadomość
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

C/C++
#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();


/*Funkcja rysująca prymitywy na Bitmape: bufor*/
void init_1( BITMAP * ini1 = NULL ) {
   
    /*Ramka na przyciski góra i dół*/
    rectfill( ini1, 0, 0, mx, my / 12, color1 );
    rectfill( ini1, 0, my, mx, my -(( my / 12 ) * 2 ), color1 );
   
   
    /*Siatka*/
    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?
P-50336
pekfos
» 2012-02-07 20:41:21
Problem jest w kodzie. 11 to nic innego jak SIGSEGV. Naruszenie ochrony pamięci.
Użyj debuggera.
P-50338
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?
P-50341
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ę ;)
P-50343
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 ?
C/C++
rectfill( ini1, 0, 0, mx, my / 12, color1 );
rectfill( ini1, 0, my, mx, my -(( my / 12 ) * 2 ), color1 );

mx - szerokość ekranu
my - wysokość ekranu
P-50347
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
C/C++
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ć
P-50350
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 ??
P-50390
pekfos
» 2012-02-08 19:20:17
Przykład z kursu Ci działa?
P-50391
« 1 » 2
  Strona 1 z 2 Następna strona