ncurses new_menu分段错误

时间:2013-05-01 16:10:36

标签: c++ segmentation-fault ncurses

我在ncurses中创建一个简单的文件选择时遇到了麻烦。以下代码失败,valgring称“条件跳转或移动取决于main.cpp中未初始化的值:122”

  // Create items 
  m_MenuItems = new ITEM * [ m_Files.size() + 1 ];

  int i = 0;
  for ( vector < CFile >::iterator it = m_Files.begin(); it != m_Files.end(); ++it, ++i ) {
    /* m_MenuItems[i] = new_item((*it).pName->c_str(), (*it).pDesc->c_str()); */
    m_MenuItems[i] = new_item("file", "size");
    cout << "[" << i << "]: " << (*it).pName->c_str() << ", " << (*it).pDesc->c_str() << endl;
  } m_MenuItems[++i] = NULL; // Item list has to be null terminated.

  // Create menu
  m_Menu = new_menu( (ITEM **)m_MenuItems ); // ! line 122
  cout << "Success" << endl;

输出就是这样:

[0]: main.cpp, 6888
                   [1]: a.out, 106798
                                     [2]: .., 4096
                                                  [3]: listdir.cpp, 701
                                                                       [4]: menu.cpp, 1908
                                                                                          [5]: ., 4096
                                                                                                      Segmentation fault (core dumped)

什么可能导致不知情的变量?

1 个答案:

答案 0 :(得分:1)

for循环结束时

m_MenuItems[++i] = NULL将导致额外的“错误”条目添加到列表中。您不需要++,因为i已经从循环退出的最后一个条目开始指向1。

此外,如果new_item(...)可以返回NULL,那么您应该在分配到列表后检查它并break,因为如果我正确理解代码,将忽略其后面的任何项目。