Memory Leak Fixes
Jump to navigation
Jump to search
On this page goes fixes for memory leaks in the SDK.
KeyValues class
See
- {{{1}}} ([todo internal name (i)])
bin\client.dll
CPanelMetaClassMgrImp class
src\cl_dll\panelmetaclassmgr.cpp
236a237,241
> while(m_MetaClassKeyValues.Count()>0)
> {
> m_MetaClassKeyValues[0]->deleteThis();
> }
> m_MetaClassKeyValues.RemoveAll();
bin\server.dll
CActBusyAnimData class
src\dlls\hl2_dll\ai_behavior_actbusy.cpp
78a79
CUtlVector<busyanim_t> m_ActBusyAnims;
> CUtlVector<const char *> m_pszSequences;
96a98
> m_pszSequences.Purge();
124a127
m_ActBusyAnims.Purge();
> pKVAnimData->deleteThis();
125a129,132
>inline char *CopyString( const char *in )
>{
> if ( !in )
> return NULL;
126a134,139
> int len = Q_strlen( in );
> char *out = new char[ len + 1 ];
> Q_memcpy( out, in, len );
> out[ len ] = 0;
> return out;
>}
131a145
> char *pSequence;
136c150
< const char *pSequence = pSection->GetString( "busy_sequence", NULL );
---
> m_pszSequences.AddToTail(pSequence = CopyString(pSection->GetString( "busy_sequence", NULL )));
138c152
< pSequence = pSection->GetString( "entry_sequence", NULL );
---
> m_pszSequences.AddToTail(pSequence = CopyString(pSection->GetString( "entry_sequence", NULL )));
140c154
< pSequence = pSection->GetString( "exit_sequence", NULL );
---
> m_pszSequences.AddToTail(pSequence = CopyString(pSection->GetString( "exit_sequence", NULL )));
RecvTable class
src\public\dt_recv.h 93a94 > delete [] m_pProps;
CSentence class
src\public\sentence.cpp 787c787 < delete m_szText; --- > delete[] m_szText;
WCEdit
src\dlls\wcedit.cpp
449a450,460
Vector *g_EntityPositions = NULL;
QAngle *g_EntityOrientations = NULL;
string_t *g_EntityClassnames = NULL;
>class GlobalCleanUp : public CAutoGameSystem
>{
> void Shutdown()
> {
> delete [] g_EntityPositions;
> delete [] g_EntityOrientations;
> delete [] g_EntityClassnames;
> delete this;
> }
>};
>
459a471
if ( !g_EntityPositions )
{
> new GlobalCleanUp();
g_EntityPositions = new Vector[NUM_ENT_ENTRIES];
g_EntityOrientations = new QAngle[NUM_ENT_ENTRIES];
// have to save these too because some entities change the classname on spawn (e.g. prop_physics_override, physics_prop)
g_EntityClassnames = new string_t[NUM_ENT_ENTRIES];
}
src\lib\vgui_controls.lib
AnimationController class
src\vgui2\controls\AnimationController.cpp
1292a1293,1311
~CPanelAnimationDictionary()
{
> int v2, v1 = m_AnimationMaps.Count();
> PanelAnimationMapEntry *pCur;
> PanelAnimationMap *pMap;
> for(int x=0;x<v1;x++)
> {
> pMap = m_AnimationMaps[x].map;
> if(pMap)
> {
> v2 = pMap->entries.Count();
> pCur = &(pMap->entries[x]);
> for(int y=0;y<v2;y++)
> {
> delete [] pCur->m_pszScriptName;
> delete [] pCur->m_pszVariable;
> delete [] pCur->m_pszType;
> delete [] pCur->m_pszDefaultValue;
> }
> }
> }
m_PanelAnimationMapPool.Clear();
}
CBitmapImagePanel class
src\public\vgui_controls\BitmapImagePanel.h 21a22 CBitmapImagePanel( vgui::Panel *parent, char const *panelName, char const *filename = NULL ); > ~CBitmapImagePanel();
src\vgui2\controls\BitmapImagePanel.cpp
61a62,67
>CBitmapImagePanel::~CBitmapImagePanel()
>{
> delete [] m_pszImageName;
> delete [] m_pszColorName;
>}
>
DirectorySelectDialog class
src\vgui2\controls\DirectorySelectDialog.cpp
258c258,260
< int rootIndex = m_pDirTree->AddItem(new KeyValues("root", "Text", m_szCurrentDrive), -1);
---
> KeyValues *kv = new KeyValues("root", "Text", m_szCurrentDrive);
> int rootIndex = m_pDirTree->AddItem(kv, -1);
> kv->deleteThis();
294a297
m_pDirTree->AddItem(kv, parentNodeIndex);
> kv->deleteThis();
}
410a414
int itemID = m_pDirTree->AddItem(kv, selectedIndex);
> kv->deleteThis();
FileOpenDialog class
src\vgui2\controls\FileOpenDialog.cpp 506a507 int itemID = m_pFileTypeCombo->AddItem(filterName, kv); > kv->deleteThis(); if ( bActive )
ScrollBar class
src\vgui2\controls\ScrollBar.cpp 323c323 < _button[index]->SetParent((Panel *)NULL); --- > _button[index]->DeletePanel(); 351c351 < _slider->SetParent((Panel *)NULL); --- > _slider->DeletePanel();
SectionedListPanel class
src\vgui2\controls\SectionedListPanel.cpp 1579a1580 m_hEditModePanel->SetVisible(false); m_hEditModePanel->SetParent((Panel *)NULL); > delete m_hEditModePanel; m_hEditModePanel = NULL;