Memory 课程';新项目&x27;函数内存泄漏或我做错了什么?

Memory 课程';新项目&x27;函数内存泄漏或我做错了什么?,memory,dictionary,memory-leaks,ncurses,Memory,Dictionary,Memory Leaks,Ncurses,我正在用Ncurses制作日历,这意味着我必须动态分配和释放内存。问题是Valgrind--leak check=full在new_item函数中显示内存泄漏。这是我的密码。我做错了什么 unordered_map<int, ITEM**> void NcurInterface::printMenu(GUIITEMS menu, GUIITEMS win) { typedef ITEM *items; // Create items int i;

我正在用Ncurses制作日历,这意味着我必须动态分配和释放内存。问题是Valgrind--leak check=full在new_item函数中显示内存泄漏。这是我的密码。我做错了什么

unordered_map<int, ITEM**> 

void NcurInterface::printMenu(GUIITEMS menu, GUIITEMS win)
{   
    typedef ITEM *items;
 // Create items
    int i;
    items *mitem = (ITEM**)new items[manager->getNmbMenuItems(menu) + 1];
    for(i = 0; i < manager->getNmbMenuItems(menu); i++) {
        mitem[i] = new_item(manager->getMenuItemsString(menu, false, i).c_str(), manager->getMenuItemsString(menu, true, i).c_str());
    }
    mitem[i] = ((char)NULL);
    setMenuItems(menu, mitem); // Insert in map
}

void NcurInterface::freeMenuItems(GUIITEMS menu)
{   
    items *clr = menuItems[menu];
        for(unsigned char i = 0; i < manager->getNmbMenuItems(menu) + 1; i++) {
            free_item(clr[i]);
        }
    menuItems.erase(menu);
    delete[] clr;
}
无序地图
void NcurInterface::printMenu(GUIITEMS菜单,GUIITEMS win)
{   
类型定义项目*项目;
//创建项目
int i;
items*mitem=(ITEM**)新项目[管理器->getNmbMenuItems(菜单)+1];
对于(i=0;igetNmbMenuItems(菜单);i++){
mitem[i]=新建项(管理器->GetMenuItemString(菜单,false,i).c_str(),管理器->GetMenuItemString(菜单,true,i).c_str());
}
mitem[i]=((字符)NULL);
setMenuItems(菜单,斜接);//插入地图
}
void NcurInterface::freeMenuItems(GUI项菜单)
{   
items*clr=menuItems[菜单];
对于(无符号字符i=0;igetNmbMenuItems(菜单)+1;i++){
自由项(clr[i]);
}
菜单项删除(菜单);
删除[]clr;
}
瓦尔研磨输出

2个块中的1056(192个直接字节,864个间接字节)字节肯定会在92块中的丢失记录62中丢失 在0x4C282B8:calloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中) 0x5491226:新的_项(在/usr/lib/x86_64-linux-gnu/libmenu.so.5.9中) 通过0x4137BC:NcurInterface::printMenu(GUIITEMS,GUIITEMS)(NcurInterface.cpp:220) 根据0x413467:NcurInterface::updateMenu(GUIITEMS,GUIITEMS,GUIITEMS)(NcurInterface.cpp:185) 通过0x417810:main(NcurInterface.cpp:754)

OP写道:

问题解决了!菜单必须先取消列表,然后才能释放,最后才能释放项目。不再有内存泄漏

(.)