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