Самый простой способ очистить GLPK по окончании программы

Я использую 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)

Согласно документации glp_init_env(void) вызывается при первом использовании любого вызова API GLPK. Но, чтобы очистить его, нужно было бы позвонить glp_free_env(void),

Я хочу, чтобы моя программа была свободна от утечек памяти и просто вызывала glp_free_env(); Вручную не является хорошим решением для меня — у меня есть несколько модульных тестов, написанных с использованием Boost Unit Test Framework, и я хочу, чтобы они также были свободными от утечек памяти

В идеале я хотел бы использовать некоторую функцию C ++, которая могла бы вызывать ее автоматически при завершении программы. Вы знаете какой-нибудь простой и понятный способ сделать это?

1

Решение

Если ответ Бенджимуса не подходит по той или иной причине, std::atexit может помочь:

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

Регистрирует функцию, на которую указывает func, для вызова в нормальном режиме.
завершение программы (через std :: exit () или возврат из
cpp / language / main function)

1

Другие решения

Как то так должно работать

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

int main ()
{
CleanupOnExit cleanup;

.. do any processing here ..

return 0;
}

cleanupдеструктор будет вызываться автоматически в конце main (даже если вы вернетесь в середине или выбросите исключение.)

1

По вопросам рекламы [email protected]