3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-23 04:38:53 +00:00

fix leaks exposed by #3383

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-03-17 13:01:46 -07:00
parent 719c5dd911
commit fd54408629
3 changed files with 14 additions and 0 deletions

View file

@ -117,6 +117,8 @@ namespace simplex {
m_bland(false), m_bland(false),
m_blands_rule_threshold(1000) {} m_blands_rule_threshold(1000) {}
~simplex();
typedef typename matrix::row row; typedef typename matrix::row row;
typedef typename matrix::row_iterator row_iterator; typedef typename matrix::row_iterator row_iterator;
typedef typename matrix::col_iterator col_iterator; typedef typename matrix::col_iterator col_iterator;

View file

@ -28,6 +28,11 @@ namespace simplex {
template<typename Ext> template<typename Ext>
const typename simplex<Ext>::var_t simplex<Ext>::null_var = UINT_MAX; const typename simplex<Ext>::var_t simplex<Ext>::null_var = UINT_MAX;
template<typename Ext>
simplex<Ext>::~simplex() {
reset();
}
template<typename Ext> template<typename Ext>
typename simplex<Ext>::row typename simplex<Ext>::row
simplex<Ext>::add_row(var_t base_var, unsigned num_vars, var_t const* vars, numeral const* coeffs) { simplex<Ext>::add_row(var_t base_var, unsigned num_vars, var_t const* vars, numeral const* coeffs) {
@ -314,6 +319,12 @@ namespace simplex {
void simplex<Ext>::reset() { void simplex<Ext>::reset() {
M.reset(); M.reset();
m_to_patch.reset(); m_to_patch.reset();
for (var_info& v : m_vars) {
em.del(v.m_value);
em.del(v.m_lower);
em.del(v.m_upper);
m.del(v.m_base_coeff);
}
m_vars.reset(); m_vars.reset();
m_row2base.reset(); m_row2base.reset();
m_left_basis.reset(); m_left_basis.reset();

View file

@ -97,6 +97,7 @@ void small_object_allocator::deallocate(size_t size, void * p) {
void * small_object_allocator::allocate(size_t size) { void * small_object_allocator::allocate(size_t size) {
if (size == 0) return nullptr; if (size == 0) return nullptr;
#if defined(Z3DEBUG) && !defined(_WINDOWS) #if defined(Z3DEBUG) && !defined(_WINDOWS)
// Valgrind friendly // Valgrind friendly
return memory::allocate(size); return memory::allocate(size);