Developer forums (C::B DEVELOPMENT STRICTLY!) > Development
BUG: Memory Leak at CompilerGCC::PrepareCompileFilePM
(1/1)
lights_joy:
in the release code of 12.11
--- Code: ---void CompilerGCC::PrepareCompileFilePM(wxFileName& file)
{
// we 're called from a menu in ProjectManager
// let's check the selected project...
[color=red]FileTreeData* ftd = DoSwitchProjectTemporarily();[/color]
ProjectFile* pf = ftd->GetProjectFile();
if (!pf)
return;
file = pf->file;
CheckProject();
}
--- End code ---
the ftd pointer here is malloc in DoSwitchProjectTemporarily function, but no use here, so it MUST be deleted, or it will result in a memory leak!
oBFusCATed:
Please check if this problem exists in the SVN sources and report back. Almost no one here is interested in 12.11 any more!
lights_joy:
this bug still exists at 13.12.
everywhere call the DoSwitchProjectTemporarily function will cause a memory leak!! :'(
stahta01:
--- Quote from: lights_joy on January 22, 2014, 02:36:27 pm ---this bug still exists at 13.12.
everywhere call the DoSwitchProjectTemporarily function will cause a memory leak!! :'(
--- End quote ---
Please read this other thread you started!
http://forums.codeblocks.org/index.php/topic,18756.msg128544.html#msg128544
oBFusCATed:
This patch should fix the problem. I'll wait for a few day and if there are no objections I'll commit it.
--- Code: ---Index: src/plugins/compilergcc/compilergcc.cpp
===================================================================
--- src/plugins/compilergcc/compilergcc.cpp (revision 9609)
+++ src/plugins/compilergcc/compilergcc.cpp (working copy)
@@ -1073,16 +1073,14 @@ FileTreeData* CompilerGCC::DoSwitchProjectTemporarily()
ProjectManager* manager = Manager::Get()->GetProjectManager();
wxTreeCtrl* tree = manager->GetUI().GetTree();
wxTreeItemId sel = manager->GetUI().GetTreeSelection();
- FileTreeData* ftd = sel.IsOk() ? (FileTreeData*)tree->GetItemData(sel) : 0;
+ FileTreeData* ftd = sel.IsOk() ? (FileTreeData*)tree->GetItemData(sel) : nullptr;
if (!ftd)
- return 0L;
- // copy ftd to a new instance, because after the SetProject() call
- // that follows, ftd will no longer be valid...
- FileTreeData* newFtd = new FileTreeData(*ftd);
+ return nullptr;
+ // We're not rebuilding the tree, so the ftd pointer is still valid after the call.
Manager::Get()->GetProjectManager()->SetProject(ftd->GetProject(), false);
AskForActiveProject();
- return newFtd;
+ return ftd;
}
void CompilerGCC::AddToCommandQueue(const wxArrayString& commands)
--- End code ---
Navigation
[0] Message Index
Go to full version