导致这些内存泄漏的原因是什么?

时间:2014-05-04 22:19:15

标签: c++ sdl-2

我已经将内存泄漏的罪魁祸首归结为文本呈现,并且不明白为什么每2秒钟程序使用的物理内存量上升约0.02 GB。你能帮忙吗?

#include "Text.h"


CText::CText()
{
    TTF_Init();
}


CText::~CText()
{
    free(mfont);
        free(message);
    free(tex);
}

void CText::Draw(std::string font, int size, std::string m_text, SDL_Renderer* renderer, int x, int y, SDL_Color color)
{
    int w = 0;
    int h = 0;

    mfont = TTF_OpenFont(("res/" + font + ".ttf").c_str(), size);
    message = TTF_RenderText_Solid(mfont, m_text.c_str(), color);
    tex = SDL_CreateTextureFromSurface(renderer, message);
    SDL_QueryTexture(tex, NULL, NULL, &w, &h);
    textRect.x = x;
    textRect.y = y;
    textRect.w = w;
    textRect.h = h;

    SDL_RenderCopy(renderer, tex, NULL, &textRect);

    TTF_CloseFont(mfont);
}

谢谢..

1 个答案:

答案 0 :(得分:5)

每次拨打Draw时,都会在tex中创建新的纹理而不会释放前一个纹理。

您的析构函数也是错误的... free仅适用于使用malloc(或callocrealloc)分配的内存。由于您未在任何地方使用malloc,因此您使用free确实没有业务。

我认为简短的回答是您只需要阅读,理解并遵循您尝试使用的API的文档。