Merge pull request #232 from louisrubet/#225/mem_leak_due_to_perf_correction

#225 mem leak due to perf correction
This commit is contained in:
Louis Rubet 2022-02-22 17:25:46 +01:00 committed by GitHub
commit d25c8cefbc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 8 deletions

View file

@ -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}")

View file

@ -5,7 +5,7 @@ bool Lexer::lexer(string& entry, map<string, ReservedWord>& keywords, vector<Syn
size_t jump;
for (size_t i = 0; i < entry.size(); i++) {
if (isspace(entry[i])) continue;
SynElement element;
SynElement element{.re = nullptr, .im = nullptr};
switch (entry[i]) {
case '"':
if (!parseString(entry, i, jump, errors, elements)) return false;
@ -116,8 +116,7 @@ int Lexer::getBaseAt(string& entry, size_t& nextIdx, bool& positive) {
if (entry[scan] == '+') {
scan++;
nextIdx = scan;
}
else if (entry[scan] == '-') {
} else if (entry[scan] == '-') {
scan++;
nextIdx = scan;
positive = false;
@ -169,8 +168,10 @@ bool Lexer::getNumberAt(string& entry, size_t idx, size_t& nextIdx, int& base, m
if (mpfr_set_str((*r)->mpfr_ptr(), token.c_str(), base, mpreal::get_default_rnd()) == 0) {
if (!positive) *(*r) = -*(*r);
return true;
} else
} 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<SynE
}
size_t i = nextIdx;
// while (i < entry.size() && entry[i] != ',') i++;
if (i >= 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});

View file

@ -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());

View file

@ -1,6 +1,6 @@
#!/bin/bash
rpn=../build/rpn
rpn=../debug/rpn
FG_RED="\033[0;31m"
FG_GREEN="\033[0;32m"