From cdc4eb058727e8491212b62ffbe5322952931c7a Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 7 Nov 2012 20:47:59 +0100 Subject: free allocated mojo --- Makefile | 2 +- hungarian.c | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 4c02575..96d0d27 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ all: - gcc -o "hungarian"{,.c} + gcc -g -o "hungarian"{,.c} test: ./"hungarian" diff --git a/hungarian.c b/hungarian.c index 90f9f64..e701af9 100644 --- a/hungarian.c +++ b/hungarian.c @@ -185,7 +185,15 @@ int main(int argc, char** argv) cell sum = 0; for (i = 0; i < n; i++) + { sum += *(*(t + *(*(assignment + i) + 0)) + *(*(assignment + i) + 1)); + free(*(assignment + i)); + free(*(table + i)); + free(*(t + i)); + } + free(assignment); + free(table); + free(t); printf("\n\nSum: %li\n\n", sum); return 0; @@ -216,7 +224,11 @@ void print(cell** t, long n, long m, long** assignment) printf("%5li%s\e[m ", (cell)(*(*(t + i) + j)), (*(*(assigned + i) + j) ? "^" : " ")); } printf("\n\n"); + + free(*(assigned + i)); } + + free(assigned); } @@ -276,13 +288,27 @@ long** kuhn_match(cell** table, long n, long m) } for (i = n; i < m; i++) *(colCovered + i) = false; + free(prime); break; } kuhn_addAndSubtract(table, rowCovered, colCovered, n, m); } } - return kuhn_assign(marks, n, m); + free(rowCovered); + free(colCovered); + free(altRow); + free(altCol); + free(rowPrimes); + free(colMarks); + + long** rc = kuhn_assign(marks, n, m); + + for (i = 0; i < n; i++) + free(*(marks + i)); + free(marks); + + return rc; } @@ -355,6 +381,8 @@ byte** kuhn_mark(cell** t, long n, long m) *(colCovered + j) = true; } + free(rowCovered); + free(colCovered); return marks; } @@ -418,7 +446,13 @@ long* kuhn_findPrime(cell** t, byte** marks, boolean* rowCovered, boolean* colCo { p = BitSet_any(zeroes); if (p < 0) + { + free(zeroes.limbs); + free(zeroes.first); + free(zeroes.next); + free(zeroes.prev); return null; + } row = p / m; col = p % m; @@ -466,6 +500,10 @@ long* kuhn_findPrime(cell** t, byte** marks, boolean* rowCovered, boolean* colCo long* rc = new_longs(2); *rc = row; *(rc + 1) = col; + free(zeroes.limbs); + free(zeroes.first); + free(zeroes.next); + free(zeroes.prev); return rc; } } -- cgit v1.2.3-70-g09d2