Почему это производит поврежденный вывод? (меню ncurses)

Он производит искаженный беспорядок, но также печатает правильную информацию. Он также не выводит все файлы. Если я укажу меньший каталог с меньшим количеством файлов, все файлы будут включены, однако, когда я делаю весь свой музыкальный каталог, около 2000 файлов, он показывает только меню с 3 элементами. Я знаю, что он успешно сканирует файлы, похоже, это проблема с моим кодом ncurses.

void init_song_menu(vector<Song>& songs){
  int nsongs = (int) songs.size();
  printw("%d",nsongs);
  ITEM **items;
  items = (ITEM **)calloc(nsongs,sizeof(ITEM *));
  for(int i = 0; i < nsongs; ++i){
    //printw(choice.c_str());
    string* choice = new string;
    choices.push_back(choice);
  //*choice += songs.at(i).get_path();
   *choice += songs.at(i).get_ID3().title;
    items[i] = new_item(choice->c_str()," ");       
  }
  WINDOW *mw = newwin(30,90,4,4);
  LSTWINDOW* menu_win = (LSTWINDOW*) mw;
  menu_opts_off(menu_win->menu,O_SHOWDESC);
  menu_win->menu = new_menu((ITEM **)items);
  set_menu_win(menu_win->menu,mw);
  set_menu_sub(menu_win->menu,derwin(menu_win,26,88,3,1));
  set_menu_format(menu_win->menu,10,1);
  set_menu_mark(menu_win->menu,"*");
  wlist.push_back(menu_win);
  focused = menu_win;    
}

http://pastebin.com/jVQpLb6A


person carboncomputed    schedule 25.03.2012    source источник
comment
Это довольно много кода. Попробуйте сократить его до меньшего образца кода и включить его в свой вопрос. Вопросы должны быть доступны для всех будущих посетителей, а материалы pastebin могут не остаться.   -  person Collin    schedule 25.03.2012
comment
Я попытался немного уменьшить его, сохранив ядро ​​кода меню.   -  person carboncomputed    schedule 25.03.2012
comment
Откуда взялся выбор? Почему не инициализируется?   -  person stark    schedule 26.03.2012
comment
selections — это вектор указателей на строки, сделанные глобальными   -  person carboncomputed    schedule 26.03.2012


Ответы (1)


Список элементов должен заканчиваться NULL. То есть вы должны выделить nsongs+1, а затем установить последний элемент в NULL:

items[nsongs]=NULL;
person Craig    schedule 26.03.2012