From 1cd44f62c31eaa6b3784c2b649e1dc8194737268 Mon Sep 17 00:00:00 2001 From: Utz-Uwe Haus Date: Tue, 1 Jun 2010 14:34:52 +0200 Subject: [PATCH] Properly dispose of precosat objects. The solver destructor does not call reset, probably to save time in satrace competition. Urgs Signed-off-by: Utz-Uwe Haus --- backends/precosat/detect-leaks.c | 26 ++++++++++++++++++++++++++ backends/precosat/precosat_wrap.c | 1 + 2 files changed, 27 insertions(+) create mode 100644 backends/precosat/detect-leaks.c diff --git a/backends/precosat/detect-leaks.c b/backends/precosat/detect-leaks.c new file mode 100644 index 0000000..7f952a9 --- /dev/null +++ b/backends/precosat/detect-leaks.c @@ -0,0 +1,26 @@ +#include "precosat_wrap.h" + +#define ABS(x) ((x)<0 ? -(x) : (x)) +#define SIGN(x) ((x)<0 ? 1 : 0) +#define var2lit(v) ((2 * ABS(v)) + SIGN(v)) + +int +main() +{ + + struct precosat_solver *s = alloc_precosat_solver(10); + + precosat_add_var_to_clause(s,var2lit(1)); + precosat_add_var_to_clause(s,var2lit(-3)); + precosat_add_var_to_clause(s,var2lit(0)); + + precosat_add_var_to_clause(s,var2lit(2)); + precosat_add_var_to_clause(s,var2lit(3)); + precosat_add_var_to_clause(s,var2lit(-1)); + precosat_add_var_to_clause(s,var2lit(0)); + + precosat_solve(s); + + free_precosat_solver(s); + return 0; +} diff --git a/backends/precosat/precosat_wrap.c b/backends/precosat/precosat_wrap.c index 72abf57..bb4161c 100644 --- a/backends/precosat/precosat_wrap.c +++ b/backends/precosat/precosat_wrap.c @@ -33,6 +33,7 @@ alloc_precosat_solver(int numvars) void free_precosat_solver(struct precosat_solver *s) { + s->solver->reset(); /* de-allocation not done in destructor...*/ delete s->solver; free(s); -- 2.11.4.GIT