【发布时间】:2013-03-16 03:17:06
【问题描述】:
我在 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 个间接)字节在 92 个丢失记录 62 中肯定丢失了 在 0x4C282B8:calloc(在 /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 中) 由 0x5491226:new_item(在 /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: 主要 (NcurInterface.cpp:754)
【问题讨论】:
标签: memory dictionary memory-leaks ncurses