我在 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)