Memory leak: Fixed a false positive
This commit is contained in:
parent
c8a5bd16a1
commit
e664f255a4
|
@ -1240,6 +1240,7 @@ void CheckMemoryLeakClass::CheckMemoryLeak_CheckScope(const Token *Tok1, const c
|
||||||
|
|
||||||
void CheckMemoryLeakClass::CheckMemoryLeak_InFunction()
|
void CheckMemoryLeakClass::CheckMemoryLeak_InFunction()
|
||||||
{
|
{
|
||||||
|
bool classmember = false;
|
||||||
bool infunc = false;
|
bool infunc = false;
|
||||||
int indentlevel = 0;
|
int indentlevel = 0;
|
||||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
|
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
|
||||||
|
@ -1250,15 +1251,17 @@ void CheckMemoryLeakClass::CheckMemoryLeak_InFunction()
|
||||||
else if (tok->str() == "}")
|
else if (tok->str() == "}")
|
||||||
--indentlevel;
|
--indentlevel;
|
||||||
|
|
||||||
|
if (tok->str() == "::")
|
||||||
|
classmember = true;
|
||||||
|
|
||||||
// In function..
|
// In function..
|
||||||
if (indentlevel == 0)
|
if (indentlevel == 0)
|
||||||
{
|
{
|
||||||
if (Token::Match(tok, ") {"))
|
if (Token::Match(tok, ") {"))
|
||||||
infunc = true;
|
infunc = !classmember;
|
||||||
|
|
||||||
else if (Token::Match(tok, "[;}]"))
|
else if (Token::Match(tok, "[;}]"))
|
||||||
infunc = false;
|
infunc = classmember = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Declare a local variable => Check
|
// Declare a local variable => Check
|
||||||
|
|
|
@ -134,6 +134,7 @@ private:
|
||||||
TEST_CASE(class1);
|
TEST_CASE(class1);
|
||||||
TEST_CASE(class2);
|
TEST_CASE(class2);
|
||||||
// TODO TEST_CASE( class3 );
|
// TODO TEST_CASE( class3 );
|
||||||
|
TEST_CASE(class4);
|
||||||
|
|
||||||
TEST_CASE(throw1);
|
TEST_CASE(throw1);
|
||||||
TEST_CASE(throw2);
|
TEST_CASE(throw2);
|
||||||
|
@ -1231,6 +1232,29 @@ private:
|
||||||
ASSERT_EQUALS(std::string(""), errout.str());
|
ASSERT_EQUALS(std::string(""), errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void class4()
|
||||||
|
{
|
||||||
|
check("struct MONITOR_POST;\n"
|
||||||
|
"class MonitorClient\n"
|
||||||
|
"{\n"
|
||||||
|
"private:\n"
|
||||||
|
" void addPost(MONITOR_POST *MonitorPost);\n"
|
||||||
|
"public:\n"
|
||||||
|
" void click();\n"
|
||||||
|
"};\n"
|
||||||
|
"\n"
|
||||||
|
"void MonitorClient::addPost(MONITOR_POST* MonitorPost)\n"
|
||||||
|
"{\n"
|
||||||
|
" _pMonitorPosts->Add(MonitorPost);\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"void MonitorClient::click()\n"
|
||||||
|
"{\n"
|
||||||
|
" MONITOR_POST *NewMeasurePost = new MONITOR_POST;\n"
|
||||||
|
" addPost( NewMeasurePost );\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue