Avatar billede alex_sleiborg Nybegynder
01. november 2007 - 09:43 Der er 3 kommentarer og
1 løsning

Lagersegment fejl på debian

Hej

Jeg er igang med at lave en lille test app, hvor jeg bruger ncurses. Det jeg har lavet indtil videre, vil gerne compiles. Men jeg får en lagersegment fejl, når jeg prøver at køre den binære fil. Hvad kan der være galt

#include <menu.h>
#include <iostream>
#include <curses.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 4

using namespace std;

char *choices[] = {"Install fluxbox and ekstra tools","Configurate fluxbox","About this software",};
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color);

int main()
{
    ITEM **my_items;
    int c;               
    MENU *my_menu;
        WINDOW *my_menu_win;
        int n_choices, i;
   
    initscr();
    start_color();
        cbreak();
        noecho();
    keypad(stdscr, TRUE);
    init_pair(1, COLOR_RED, COLOR_BLACK);

        n_choices = ARRAY_SIZE(choices);
        my_items = (ITEM **)calloc(n_choices, sizeof(ITEM *));
        for(i = 0; i < n_choices; ++i)
                my_items[i] = new_item(choices[i], choices[i]);

    my_menu = new_menu((ITEM **)my_items);

        my_menu_win = newwin(10, 40, 4, 4);
        keypad(my_menu_win, TRUE);
   
        set_menu_win(my_menu, my_menu_win);
        set_menu_sub(my_menu, derwin(my_menu_win, 6, 38, 3, 1));

        set_menu_mark(my_menu, " * ");

        box(my_menu_win, 0, 0);
    print_in_middle(my_menu_win, 1, 0, 40, "My Menu", COLOR_PAIR(1));
    mvwaddch(my_menu_win, 2, 0, ACS_LTEE);
    mvwhline(my_menu_win, 2, 1, ACS_HLINE, 38);
    mvwaddch(my_menu_win, 2, 39, ACS_RTEE);
    mvprintw(LINES - 2, 0, "F1 to exit");
    refresh();
       
    post_menu(my_menu);
    wrefresh(my_menu_win);

    while((c = wgetch(my_menu_win)) != KEY_F(1))
    {      switch(c)
            {    case KEY_DOWN:
                menu_driver(my_menu, REQ_DOWN_ITEM);
                break;
            case KEY_UP:
                menu_driver(my_menu, REQ_UP_ITEM);
                break;
        }
                wrefresh(my_menu_win);
    }   

        unpost_menu(my_menu);
        free_menu(my_menu);
        for(i = 0; i < n_choices; ++i)
                free_item(my_items[i]);

    endwin();
    return 0;
}
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string, chtype color)
{    int length, x, y;
    float temp;

    if(win == NULL)
        win = stdscr;
    getyx(win, y, x);
    if(startx != 0)
        x = startx;
    if(starty != 0)
        y = starty;
    if(width == 0)
        width = 80;

    length = strlen(string);
    temp = (width - length)/ 2;
    x = startx + (int)temp;
    wattron(win, color);
    mvwprintw(win, y, x, "%s", string);
    wattroff(win, color);
    refresh();
}
Avatar billede segmose Nybegynder
01. november 2007 - 10:37 #1
Du har en pointer fejl et sted.
Avatar billede alex_sleiborg Nybegynder
01. november 2007 - 12:15 #2
Ja, det havde jeg næsten regnet ud... Men hvor? Du kan finde den fejl?
Avatar billede segmose Nybegynder
01. november 2007 - 12:56 #3
:)
Godt svar!

Du bruger kdevelop?
Så gå op i toppen of find debug menuen, vælg start, du burde så få en fejl fra gdb et sted.
Check nu de variabler der er i den linie, enten højre klik og vælg watch eller udfold listen i venstre side, der står sikkert #0 main eller sådan noget.
Jeg får altid lidt galloperende paranoia når jeg har med pointerer at gøre, så du bør checke på alle retur og parameter værdier der er pointerer.
Avatar billede alex_sleiborg Nybegynder
01. november 2007 - 13:06 #4
Super... Jeg prøver mig lige lidt frem, skal nok få det til at virke... Og sorry fordi jeg ikke kan finde ud af, og sætte ordene sammen til en fornuftigt "Kan du" :)
Men det kan godt være der lige kommer et par spørgsmål mere hen af vejen. Men indtil videre tak :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester