Skip to content

Commit 519b7db

Browse files
authored
Fixed memory leak with hintmessage. (#581)
Fixed memory leak with hintmessage.
1 parent 99954a2 commit 519b7db

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

regamedll/dlls/hintmessage.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,7 @@ CHintMessage::CHintMessage(const char *hintString, bool isHint, CUtlVector<const
1515

1616
CHintMessage::~CHintMessage()
1717
{
18-
for (int i = 0; i < m_args.Count(); i++)
19-
delete[] m_args[i];
20-
21-
m_args.RemoveAll();
18+
m_args.PurgeAndDeleteArrays();
2219
}
2320

2421
void CHintMessage::Send(CBaseEntity *client)
@@ -29,11 +26,7 @@ void CHintMessage::Send(CBaseEntity *client)
2926
void CHintMessageQueue::Reset()
3027
{
3128
m_tmMessageEnd = 0;
32-
33-
for (int i = 0; i < m_messages.Count(); i++)
34-
delete m_messages[i];
35-
36-
m_messages.RemoveAll();
29+
m_messages.PurgeAndDeleteElements();
3730
}
3831

3932
void CHintMessageQueue::Update(CBaseEntity *client)

regamedll/dlls/player.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ void CBasePlayer::OnDestroy()
9999
delete[] m_rebuyString;
100100
m_rebuyString = nullptr;
101101
}
102+
m_hintMessageQueue.Reset();
102103
}
103104
#endif
104105

regamedll/public/utlvector.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ class CUtlVector
121121

122122
// Purges the list and calls delete on each element in it.
123123
void PurgeAndDeleteElements();
124+
void PurgeAndDeleteArrays();
124125

125126
// Set the size by which it grows when it needs to allocate more memory.
126127
void SetGrowSize(int size);
@@ -547,6 +548,15 @@ inline void CUtlVector<T>::PurgeAndDeleteElements()
547548
Purge();
548549
}
549550

551+
template <class T>
552+
inline void CUtlVector<T>::PurgeAndDeleteArrays()
553+
{
554+
for (int i = 0; i < m_Size; i++)
555+
delete[] Element(i);
556+
557+
Purge();
558+
}
559+
550560
template <class T>
551561
void CUtlVector<T>::SetGrowSize(int size)
552562
{

0 commit comments

Comments
 (0)