From 84a105532d2b341aa110fc3e8fdf73d7a803fb43 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 28 Mar 2013 00:22:21 +0000 Subject: [PATCH] Fix memory leak --- sudoku.en.cc | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/sudoku.en.cc b/sudoku.en.cc index 9c79a7e..121cbbb 100644 --- a/sudoku.en.cc +++ b/sudoku.en.cc @@ -1,6 +1,7 @@ #include #include #include +#include using namespace std; class Possible { @@ -164,39 +165,34 @@ Sudoku::Sudoku(string s) } } -Sudoku* solve(Sudoku *S) { - if (S == NULL || S->is_solved()) { +unique_ptr solve(unique_ptr S) { + if (S == nullptr || S->is_solved()) { return S; } int k = S->least_count(); Possible p = S->possible(k); for (int i = 1; i <= 9; i++) { if (p.is_on(i)) { - Sudoku *S1 = new Sudoku(*S); + unique_ptr S1(new Sudoku(*S)); if (S1->assign(k, i)) { - Sudoku *S2 = solve(S1); - if (S2 != NULL) { - if (S2 != S1) delete S1; + if (auto S2 = solve(std::move(S1))) { return S2; } } - delete S1; } } - return NULL; + return {}; } int main() { Sudoku::init(); string line; while (getline(cin, line)) { - Sudoku* S = solve(new Sudoku(line)); - if (S != NULL) { + if (auto S = solve(unique_ptr(new Sudoku(line)))) { S->write(cout); } else { cout << "No solution"; } - delete S; cout << endl; } }