2013-03-26 42 views
1

我在Ncurses中製作日曆,這意味着我必須動態分配和釋放內存。 Valgrind --leak-check = full顯示了new_item函數中的內存泄漏。這是我的代碼。我究竟做錯了什麼?Ncurses的'new_item'函數mem泄漏或我做錯了什麼?

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的輸出

1056(192直接,864間接)字節2塊損失記錄肯定丟失的62 92 在0x4C282B8:釋放calloc(在/ usr/LIB /的valgrind/(NITInterface.cpp:0x8491226):new_item(in /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) by 0x417810 :主(NcurInterface.cpp:754)

回答

0

的OP寫道:

問題解決了!菜單必須先發布,然後才能釋放,最後可以釋放項目。沒有更多的內存泄漏!

+0

([在編輯中回答的問題,轉換爲社區wiki](http://meta.stackoverflow.com/questions/267434/what-is-the-woole-action-when-the-answer-到一個問題,是添加到所述闕))。 – 2015-07-03 22:18:25