Free some memory allocations explicitly, found by vagrant

I found strange issue when Celestia is built using cmake: the program
was aborted with "corrupted size vs. prev_size" message.

GDB showed address as `delete[] text` in Console::~Console(), while there
was not double free().

Vargant showed "incorrect delete/delete[]/realloc" for
ShaderManager.shaders.

Now it's gone.
pull/110/head
Hleb Valoshka 2018-10-20 18:35:47 +03:00
parent b51280666b
commit 5e84d0e3e3
4 changed files with 26 additions and 5 deletions

View File

@ -54,6 +54,13 @@ Body::~Body()
delete timeline;
delete satellites;
delete frameTree;
if(altSurfaces)
{
for (const auto s : *altSurfaces)
delete s.second;
delete altSurfaces;
}
}

View File

@ -547,6 +547,14 @@ Renderer::~Renderer()
if (sceneTexture != 0)
glDeleteTextures(1, &sceneTexture);
#endif
delete shadowTex;
delete shadowMaskTexture;
delete penumbraFunctionTexture;
delete normalizationTex;
for(const auto tex : eclipseShadowTextures)
delete tex;
}

View File

@ -202,10 +202,6 @@ ShaderProperties::hasShadowsForLight(unsigned int light) const
}
// Returns true if diffuse, specular, bump, and night textures all use the
// same texture coordinate set.
bool
@ -300,6 +296,16 @@ ShaderManager::ShaderManager()
}
ShaderManager::~ShaderManager()
{
for(const auto& shader : shaders)
{
delete shader.second;
}
shaders.clear();
}
CelestiaGLProgram*
ShaderManager::getShader(const ShaderProperties& props)
{

View File

@ -248,7 +248,7 @@ class ShaderManager
{
public:
ShaderManager();
~ShaderManager() = default;
~ShaderManager();
CelestiaGLProgram* getShader(const ShaderProperties&);