Memory Leak Fixes

From Valve Developer Community
Revision as of 03:51, 20 January 2006 by SieQ (talk | contribs) (→‎CPanelMetaClassMgrImp class: i have forgotten in my prev. edit (after loop there is nothing to remove))
Jump to navigation Jump to search

On this page goes fixes for memory leaks in the SDK.

Shared

KeyValues class

See

{{{1}}} ([todo internal name (i)])

bin\client.dll

CPanelMetaClassMgrImp class

src\cl_dll\panelmetaclassmgr.cpp
236a237,242
>	while(m_MetaClassKeyValues.Count()>0)
>	{
>		unsigned short i = m_MetaClassKeyValues.First();
>		m_MetaClassKeyValues[i]->deleteThis();
>		m_MetaClassKeyValues.RemoveAt(i);
>	}

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

Note.pngNote:I am not completely sure if this is a valid deletion... It seems right, can someone validate it by testing?
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

» See Compiling 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;