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

[C]Biblioteka Pdcurses - zawieszanie się programu.

Ostatnio zmodyfikowano 2012-11-22 22:02
Autor Wiadomość
drago77
Temat założony przez niniejszego użytkownika
[C]Biblioteka Pdcurses - zawieszanie się programu.
» 2012-11-22 19:45:40
Witam. Stworzyłem program, który dodaje adresy stron www i zapisuje je w pliku tekstowym. Stworzyłem menu w pdcurses i niestety ale kiedy chcę uruchomić funkcję dodającą adres program się zawiesza. Dodam, że używam Cod::Blocka, kompilator GNU GCC Compiler. Kod:

C/C++
int main()
{
    char opcja1[ 15 ];
    const char * znak = " *";
    const short int gora = 1, dol = 2, MENU_POZ_SR = 0;
    short int kod = 0, ktory = 1;
    char a[ 10 ];
   
    const char * op1 = "Dodaj adres\n";
    const char * op2 = "Wyjdz\n";
   
    initscr();
    keypad( stdscr, TRUE );
    start_color();
   
    do
    {
        clear();
        switch( ktory )
        {
        case 1:
            {
                attron( A_REVERSE );
                mvprintw( 0, MENU_POZ_SR, op1 );
                attroff( A_REVERSE );
                mvprintw( 1, MENU_POZ_SR, op2 );
                break;
            }
        case 2:
            {
                mvprintw( 0, MENU_POZ_SR, op1 );
                attron( A_REVERSE );
                mvprintw( 1, MENU_POZ_SR, op2 );
                attroff( A_REVERSE );
                break;
            }
            default: break;
        }
        kod = getch();
        if(( kod == 258 ) &&( ktory < dol ) )
             ktory++;
       
        if(( kod == 259 ) &&( ktory > gora ) )
             ktory--;
       
        if( kod == 260 )
             break;
       
        if( kod == 261 )
        {
            switch( ktory )
            {
            case 1:
                {
                    clear();
                    DodajAdres(); //funkcja ktora powoduje zawieszanie się programu
                    getch();
                    break;
                }
            case 2:
                {
                    clear();
                    printw( op2 );
                    getch();
                    break;
                }
                default: break;
            }
        }
       
    } while( 1 );
   
    endwin();
    return 0;
P-69718
Mrovqa
» 2012-11-22 21:19:10
Mam takie dziwne wrażenie, że nawet nie wiesz co piszesz, że ten kod po prostu skądś ściągnąłeś...

C/C++
DodajAdres(); //funkcja ktora powoduje zawieszanie się programu

Co nam po tym? Daj nam więcej informacji. Co konkretnie działa źle (kod funkcji), jak przejawia się błąd? Próbowałeś przedebuggować kod?
P-69729
drago77
Temat założony przez niniejszego użytkownika
» 2012-11-22 21:40:04
Kiedy wywoływałem tę funkcję poza obszarem działania curses wszystko było ok. Zdebugowałem kod i dostałem taki komunikat:

Setting breakpoints
Debugger name and version: GNU gdb 6.8
Child process PID: 7308
Program received signal SIGSEGV, Segmentation fault.
In ?? () (C:\Windows\SysWOW64\guard32.dll)
P-69734
Mrovqa
» 2012-11-22 21:52:26
Widać kiepsko debuggowałeś, skoro ten log Ci nic nie dał i skoro nic nie wywnioskowałeś po wartościach zmiennych (których zapewne nawet nie podglądnąłeś).
Gdzieś odwołujesz się poza dostępną pamięć - prawdopodobnie do czegoś, co jest poza tablicą. (coś w rodzaju
int tab[ 3 ]; tab[ 8 ] = 3;
)
P-69735
drago77
Temat założony przez niniejszego użytkownika
» 2012-11-22 22:02:19
Ja myślę że ten błąd jest spowodowany przez bibliotekę curses. Kiedy chciałem dodać conio.h też mi wywalało błędy więc curses jest raczej przyczyną.

Edit: problem rozwiązany, zamieniłem funkcję scanf na scanw :D Temat do zamknięcia.
P-69736
« 1 »
  Strona 1 z 1