Memory 课程';新项目&x27;函数内存泄漏或我做错了什么?
我正在用Ncurses制作日历,这意味着我必须动态分配和释放内存。问题是Valgrind--leak check=full在new_item函数中显示内存泄漏。这是我的密码。我做错了什么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;
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写道:
问题解决了!菜单必须先取消列表,然后才能释放,最后才能释放项目。不再有内存泄漏
(.)