我在我的程序中使用了GNU線性編程工具包。一切工作正常,但是當我檢查程序與Valgrind的,我發現了一些內存泄漏:在程序終止時清理GLPK最乾淨的方法
==7051== 160 bytes in 1 blocks are still reachable in loss record 1 of 3
==7051== at 0x4C28BED: malloc (vg_replace_malloc.c:263)
==7051== by 0x52CFACB: glp_init_env (in /usr/lib/libglpk.so.0.30.0)
==7051== by 0x52CFC1C: ??? (in /usr/lib/libglpk.so.0.30.0)
==7051== by 0x52D0211: glp_malloc (in /usr/lib/libglpk.so.0.30.0)
==7051== by 0x52AC50A: glp_create_prob (in /usr/lib/libglpk.so.0.30.0)
根據文檔glp_init_env(void)
被稱爲第一次使用任何GLPK API調用。但要清理它,人們需要撥打glp_free_env(void)
。
我希望我的程序能夠無內存泄漏,只需手動調用glp_free_env();
對我來說不是一個好的解決方案 - 我有一些使用Boost單元測試框架編寫的單元測試,我希望它們也可以無內存泄漏。
理想情況下,我會使用一些C++功能,可以在程序終止時自動調用它。你知道任何簡單和乾淨的方法嗎?
爲什麼你不希望調用'free'函數來匹配你的'init'函數? –
我認爲問題在於'..init..'在庫中被自動調用,而不是直接由用戶代碼調用。 – benjymous
是的,我不直接調用init。當我使用'SIGABRT'或類似的庫後,只需運行'glp_free_env()',我就需要仔細選擇何時處理庫。如果我在程序終止時運行功能,則不存在發生此類事件的風險。 –