我在程序中使用GNU Linear Programming Kit。一切正常,但是当我用valgrind检查程序时,发现一些内存泄漏:

==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)

根据文档,在首次使用任何GLPK API调用时会调用glp_init_env(void)。但是要清理它,必须调用glp_free_env(void)

我希望我的程序没有内存泄漏,而简单地手动调用glp_free_env();对我来说不是一个好的解决方案-我有一些使用Boost Unit Test Framework编写的单元测试,我也希望它们也没有内存泄漏。

理想情况下,我将使用一些C++功能,该功能可以在程序终止时自动调用它。您知道任何简单明了的方法吗?

最佳答案

如果benjymous's answer由于某种原因而不适合, std::atexit 可能会有所帮助:

int atexit( void (*func)() );

关于c++ - 在程序终止时清除GLPK的最干净方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21785221/

10-11 19:10