C++ 使GLPK在程序终止时清除的最干净的方法

C++ 使GLPK在程序终止时清除的最干净的方法,c++,memory-leaks,valgrind,glpk,C++,Memory Leaks,Valgrind,Glpk,我正在我的程序中使用GNU线性规划工具包。一切正常,但当我用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

我正在我的程序中使用GNU线性规划工具包。一切正常,但当我用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)
根据文档
glp\u init\u env(void)
在首次使用任何GLPK API调用时被调用。但要清理它,需要调用
glp\u free\u env(void)

我希望我的程序没有内存泄漏,只需调用
glp_free_env()手动对我来说不是一个好的解决方案-我有一些用Boost单元测试框架编写的单元测试,我希望它们也没有内存泄漏


理想情况下,我会使用一些C++程序,可以在程序终止时自动调用它。你知道有什么简单干净的方法吗?

像这样的方法应该行得通

class CleanupOnExit
{
public:
    ~CleanupOnExit()
    {
        glp_free_env(void);
    }
};

int main ()
{
    CleanupOnExit cleanup;

    .. do any processing here ..

    return 0;
}

<代码>清除<代码>析构函数将在<代码>主< <代码>结束时自动调用(即使返回中间,也可以抛出异常)

如果不适合某个原因或其他原因,可以帮助:

int atexit( void (*func)() );
注册func指向的函数,以便在正常情况下调用 程序终止(通过std::exit()或从 cpp/语言/主要功能)


你为什么不想调用
free
函数来匹配你的
init
函数呢?我想问题是
.init..
是在库中自动调用的,不是直接由用户代码调用的。是的,我不直接调用init。更重要的是,当我实际处理库时,我需要仔细选择什么,因为在我使用库之后简单地运行
glp\u free\u env()
,最终得到
SIGABRT
或类似的结果。如果我在程序终止时运行函数,则不会发生此类事件。更好的方法是让该类也执行初始化。还有Boost单元测试框架-它自动创建main()函数,因此您的方法只解决了我的部分问题。这正是我要找的!谢谢