From 10abbda6a7021cd5c6cff5c5bdf9f1a928cfa463 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 5 Feb 2009 20:17:01 +0000 Subject: [PATCH] memleak: corrected the wrong line number (#77) --- src/checkmemoryleak.cpp | 2 +- src/cppcheck.cpp | 12 +----------- test/testmemleak.cpp | 12 ++++++++++++ 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/checkmemoryleak.cpp b/src/checkmemoryleak.cpp index 891572bec..8e70a41ea 100644 --- a/src/checkmemoryleak.cpp +++ b/src/checkmemoryleak.cpp @@ -601,7 +601,7 @@ Token *CheckMemoryLeakClass::getcode(const Token *tok, std::list { addtoken("use"); } - else if (Token::Match(tok, std::string("[;{}=(,+-*/] " + varnameStr + " [").c_str())) + else if (Token::Match(tok->previous(), std::string("[;{}=(,+-*/] " + varnameStr + " [").c_str())) { addtoken("use_"); } diff --git a/src/cppcheck.cpp b/src/cppcheck.cpp index 30fadbc6b..fb928eec5 100644 --- a/src/cppcheck.cpp +++ b/src/cppcheck.cpp @@ -33,6 +33,7 @@ #include "errormessage.h" #include +#include #include #include #include @@ -307,14 +308,6 @@ unsigned int CppCheck::check() void CppCheck::checkFile(const std::string &code, const char FileName[]) { - /* For debugging: Write the code into a file and exit - { - std::ofstream f("temp.txt"); - f << code; - exit(0); - } - */ - Tokenizer _tokenizer; // Tokenize the file @@ -347,11 +340,8 @@ void CppCheck::checkFile(const std::string &code, const char FileName[]) if (ErrorMessage::charArrayIndex(_settings) || ErrorMessage::charBitOp(_settings)) checkOther.CheckCharVariable(); - - _tokenizer.simplifyTokenList(); - if (_settings._unusedFunctions) _checkFunctionUsage.parseTokens(_tokenizer); diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index b3ffaa302..c742b218e 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -174,6 +174,7 @@ private: TEST_CASE(dealloc_use_4); TEST_CASE(dealloc_use_5); TEST_CASE(dealloc_use_6); + TEST_CASE(dealloc_use_7); // free a free'd pointer TEST_CASE(freefree1); @@ -1728,6 +1729,17 @@ private: ASSERT_EQUALS(std::string(""), errout.str()); } + void dealloc_use_7() + { + check("void foo()\n" + "{\n" + " char *str = new char[10];\n" + " delete [] str;\n" + " str[10] = 0;\n" + "}\n"); + ASSERT_EQUALS(std::string("[test.cpp:5]: Using \"str\" after it has been deallocated / released\n"), errout.str()); + } + void freefree1() {