diff --git a/CMakeLists.txt b/CMakeLists.txt index 422a184..c6bde2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ project(rpn) if((NOT CMAKE_BUILD_TYPE MATCHES Debug) AND (NOT CMAKE_BUILD_TYPE MATCHES Release)) - set(CMAKE_BUILD_TYPE Release CACHE string "Choose the type of build, options are: None Debug Release" FORCE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release" FORCE) endif() message(STATUS "Build mode: ${CMAKE_BUILD_TYPE}") diff --git a/src/lexer.cpp b/src/lexer.cpp index afe433f..309a7eb 100644 --- a/src/lexer.cpp +++ b/src/lexer.cpp @@ -5,7 +5,7 @@ bool Lexer::lexer(string& entry, map& keywords, vectormpfr_ptr(), token.c_str(), base, mpreal::get_default_rnd()) == 0) { if (!positive) *(*r) = -*(*r); return true; - } else - return false; + } else { + delete *r; + return false; + } } nextIdx = token.size() + idx + 1; return false; @@ -206,16 +207,19 @@ bool Lexer::parseComplex(string& entry, size_t idx, size_t& nextIdx, vector= entry.size()) { elements.push_back({cmd_symbol, .value = entry.substr(idx, entry.size() - idx)}); nextIdx = entry.size(); + if (re != nullptr) delete re; + if (im != nullptr) delete im; return true; // complex format error, return a symbol } if (!getNumberAt(entry, i, nextIdx, imBase, &im, ')')) { elements.push_back({cmd_symbol, .value = entry.substr(idx, entry.size() - idx)}); nextIdx = entry.size(); + if (re != nullptr) delete re; + if (im != nullptr) delete im; return true; // complex format error, return a symbol } elements.push_back({cmd_complex, .re = re, .im = im, .reBase = reBase, .imBase = imBase}); diff --git a/src/program.cpp b/src/program.cpp index aea896c..02ae9cf 100644 --- a/src/program.cpp +++ b/src/program.cpp @@ -612,7 +612,10 @@ ret_value program::parse(string& entry) { break; default: show_error(ret_unknown_err, "error creating program from entry"); + break; } + if (element.re != nullptr) delete element.re; + if (element.im != nullptr) delete element.im; } } else for (SynError& err : errors) show_syntax_error(err.err.c_str()); diff --git a/test/mem_test.sh b/test/mem_test.sh index 5c143f1..4fc101d 100755 --- a/test/mem_test.sh +++ b/test/mem_test.sh @@ -1,6 +1,6 @@ #!/bin/bash -rpn=../build/rpn +rpn=../debug/rpn FG_RED="\033[0;31m" FG_GREEN="\033[0;32m"