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: calloc (/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 内) で 0x5491226: new_item (/usr 内) の損失レコード 62/92 で確実に失われます。 /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) by 0x417810: メイン (NcurInterface.cpp:754)