Ir para conteúdo
Fórum Script Brasil
  • 0

Segmentation Fault - Listando diretórios com ncurses e dirent


tuliomf09

Pergunta

É 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.

Editado por tuliomf09
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...