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'''no вы можете помочь! Я никогда не использовал lpsolve, но я очень сомневаюсь, что есть утечки памяти, которые наблюдаются без какого-либо жесткого использования (= низкая вероятность утечки памяти). – sascha

ответ

1

Оказывается, это была относительно простая ошибка, вызванная не внимательно читает документы, но я оставлю это здесь в случае, если кто-то считает это полезным.

Стандарт C++ delete будет не свободной памяти, связанной с lprec. Используйте lpsolve's delete_lp()(1) или free_lp()(2) вместо этого.

+0

Это общее правило! Каждая функция выделения ресурсов поставляется с функцией «освобождения» партнера. Вы увидите это в ** всех ** хорошо разработанных API. Фактически отсутствие такого спаривания распределения/освобождения было бы серьезным недостатком API, даже если вся функция освобождения выполняет вызов 'free' /' delete' (или даже ничего не делает). Это даже верно на разных языках, хотя на современных языках освобождение часто скрывается; например, в правильной библиотеке C++ вместо этого вы используете деструктор. –

Смежные вопросы