É o seguinte, estou tentando desenvolver um programinha simples em C que, através das bibliotecas ncurses.h, menu.h e dirent.h listaria os arquivos de um diretório. Acontece que o programa compila, mas ao executar dá Segmentation Fault. Então chamei o gdb pra ver onde estava o erro e ele apontou para a linha 38. Segue o código:
#include <dirent.h>
#include <ncurses.h>
#include <menu.h>
#include <string.h>
#include <stdlib.h>
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD 4
int main(int argc, char *argv[])
{
char *choices;
ITEM **items;
int c;
MENU *menu;
int n_choices, i;
ITEM *cur_item;
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
DIR *d;
struct dirent *dir;
d = opendir("/home/tulio");
int b=0, k;
if (d)
{
while((dir = readdir(d)) != NULL)
{
choices[b] = *dir->d_name; <---------------------------- ERRO
b++;
}
items[n_choices] = (ITEM *)NULL;
closedir(d);
items = (ITEM **)calloc(n_choices+1, sizeof(ITEM *));
n_choices = ARRAY_SIZE(choices);
for(k=0; n_choices; k++)
{
items[k] = new_item(&choices[k], "");
}
menu = new_menu((ITEM **)items);
menu = new_menu((ITEM **)items);
mvprintw(LINES - 2, 0, "F1 to exit");
post_menu(menu);
refresh();
int key;
while((key = getch()) != KEY_F(1))
{
switch(key)
{
case KEY_DOWN: menu_driver(menu, REQ_DOWN_ITEM); break;
case KEY_UP : menu_driver(menu, REQ_UP_ITEM); break;
}
}
}
free_item(items[0]);
free_item(items[1]);
free_menu(menu);
endwin();
}
Alguém pode me explicar o que fiz errado? A princípio achava que poderia ser algum problema com ponteiros, mas ao testar a listagem de diretórios em um arquivo .c isolado, sem ncurses e só com printf, compilou e rodou direitinho. Obrigado.
Pergunta
tuliomf09
É o seguinte, estou tentando desenvolver um programinha simples em C que, através das bibliotecas ncurses.h, menu.h e dirent.h listaria os arquivos de um diretório. Acontece que o programa compila, mas ao executar dá Segmentation Fault. Então chamei o gdb pra ver onde estava o erro e ele apontou para a linha 38. Segue o código:
Alguém pode me explicar o que fiz errado? A princípio achava que poderia ser algum problema com ponteiros, mas ao testar a listagem de diretórios em um arquivo .c isolado, sem ncurses e só com printf, compilou e rodou direitinho. Obrigado.
Editado por tuliomf09Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.