1

我正在致力於一個C++項目,涉及使用lpsolve版本5.5解決許多線性程序。我遇到內存泄漏問題。釋放lpsolve內存

我寫了一些測試代碼:

int main(){ 
    for(int i = 0; i < 100; i++){ 
    lprec* lp = make_lp(0, 5000); //0 rows, 5000 columns 
    set_verbose(lp, IMPORTANT); 
    solve(lp); 
    delete(lp); 
    } 
} 

此代碼泄漏約80萬字節,正好有100個錯誤。 lpsolve中是否存在已知的泄漏,或者我是否正確處理清理?

感謝

+0

沒有'''make_lp''的定義'沒有人能幫助你!我從來沒有使用lpsolve,但我非常懷疑,有沒有一些硬核使用(=內存泄漏的可能性很低)觀察到的內存泄漏。 – sascha

回答

1

事實證明,這是一個相對簡單的錯誤,造成不仔細閱讀文檔,但我會以防其他人發現它有用離開這裏了這一點。

標準C++ delete而不是與lprec相關的空閒內存。改爲使用lpsolve的delete_lp()(1)free_lp()(2)

+0

這是一條通用規則!每個資源分配功能都帶有其「合作伙伴」重新分配功能。您將在**所有**精心設計的API中看到這一點。事實上,即使所有的釋放函數都是調用'free' /'delete'(甚至什麼都不做),那麼缺少這種分配/釋放配對將成爲API中的嚴重缺陷。甚至在不同的語言中也是如此,但在現代語言中,釋放往往是隱藏的;例如,在一個合適的C++庫中,您將使用析構函數。 –