Fix new[]/delete missmatches and memory leaks found by clang's ASAN

Sometimes memory was allocated with new[] but freed with delete instead
of delete[], which is wrong.
And there were some small memory leaks, too.
Furtunately clang's AddressSanitizer detected all that so I could easily
fix it.

(There seem to be some more small memory leaks which are harder to fix,
though)
This commit is contained in:
Daniel Gibson 2015-12-17 18:11:03 +01:00
parent 018e13feef
commit 86c634b55c
3 changed files with 13 additions and 8 deletions

View file

@ -861,20 +861,20 @@ idPVS::Shutdown
*/
void idPVS::Shutdown( void ) {
if ( connectedAreas ) {
delete connectedAreas;
delete[] connectedAreas;
connectedAreas = NULL;
}
if ( areaQueue ) {
delete areaQueue;
delete[] areaQueue;
areaQueue = NULL;
}
if ( areaPVS ) {
delete areaPVS;
delete[] areaPVS;
areaPVS = NULL;
}
if ( currentPVS ) {
for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) {
delete currentPVS[i].pvs;
delete[] currentPVS[i].pvs;
currentPVS[i].pvs = NULL;
}
}

View file

@ -861,20 +861,20 @@ idPVS::Shutdown
*/
void idPVS::Shutdown( void ) {
if ( connectedAreas ) {
delete connectedAreas;
delete[] connectedAreas;
connectedAreas = NULL;
}
if ( areaQueue ) {
delete areaQueue;
delete[] areaQueue;
areaQueue = NULL;
}
if ( areaPVS ) {
delete areaPVS;
delete[] areaPVS;
areaPVS = NULL;
}
if ( currentPVS ) {
for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) {
delete currentPVS[i].pvs;
delete[] currentPVS[i].pvs;
currentPVS[i].pvs = NULL;
}
}

View file

@ -53,6 +53,11 @@ public:
explicit idPolynomial( float a, float b, float c, float d );
explicit idPolynomial( float a, float b, float c, float d, float e );
~idPolynomial() // DG: don't leak coefficient's memory!
{
Mem_Free16( coefficient );
}
float operator[]( int index ) const;
float & operator[]( int index );