1

我在 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;
}

Valgrind 输出

2 个块中的 1,056(192 直接,864 间接)字节在 0x4C282B8 处的 92 个丢失记录 62 中肯定丢失:calloc(在 /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 中)由 0x5491226:new_item(在 /usr /lib/x86_64-linux-gnu/libmenu.so.5.9) by 0x4137BC: NcurInterface::printMenu(GUIITEMS, GUIITEMS) (NcurInterface.cpp:220) by 0x413467: NcurInterface::updateMenu(GUIITEMS, GUIITEMS, GUIITEMS) (NcurInterface .cpp:185) 由 0x417810: 主要 (NcurInterface.cpp:754)

4

1 回答 1

0

OP写道:

问题解决了!菜单必须先取消发布,然后才能释放,最后才能释放项目。没有更多的内存泄漏!

于 2015-07-03T22:17:18.607 回答