diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | hungarian.c | 34 |
2 files changed, 34 insertions, 2 deletions
@@ -1,5 +1,5 @@ all: - gcc -o "hungarian"{,.c} + gcc -g -o "hungarian"{,.c} nodebug: gcc -o "hungarian"{,.c} diff --git a/hungarian.c b/hungarian.c index fc44b64..5c82db3 100644 --- a/hungarian.c +++ b/hungarian.c @@ -183,7 +183,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; @@ -214,7 +222,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); } @@ -274,13 +286,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; } @@ -353,6 +379,8 @@ byte** kuhn_mark(cell** t, long n, long m) *(colCovered + j) = true; } + free(rowCovered); + free(colCovered); return marks; } @@ -470,6 +498,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; } } |