C++ SDL_TTF绘图int到字符串内存泄漏?

C++ SDL_TTF绘图int到字符串内存泄漏?,c++,memory-leaks,drawing,sdl,sdl-ttf,C++,Memory Leaks,Drawing,Sdl,Sdl Ttf,好的,我一直在尝试显示一个整数,它可以更新并反映在屏幕上。(e.x.显示鼠标位置的x和y坐标),它按照我想要的方式运行,但随后我打开了好的ol'task manager,发现在运行7分钟后,我已经达到了大约600mb。当我注释掉我在屏幕上呈现的整数时(这样它们就不会绘制或更新)。该程序在7分钟后徘徊在20mb左右。我找不到问题,有人能帮我找出哪里出了问题吗?谢谢 //textmanager.h #pragma once #ifndef TEXTMANAGER_H #define TEXTMANA

好的,我一直在尝试显示一个整数,它可以更新并反映在屏幕上。(e.x.显示鼠标位置的x和y坐标),它按照我想要的方式运行,但随后我打开了好的ol'task manager,发现在运行7分钟后,我已经达到了大约600mb。当我注释掉我在屏幕上呈现的整数时(这样它们就不会绘制或更新)。该程序在7分钟后徘徊在20mb左右。我找不到问题,有人能帮我找出哪里出了问题吗?谢谢

//textmanager.h

#pragma once
#ifndef TEXTMANAGER_H
#define TEXTMANAGER_H

#include <SDL_ttf.h>
#include "graphicsManager.h"
#include <sstream>

struct textManager{
public:
    textManager(){}
    ~textManager();
    void SetText(std::string msg, int x, int y);
    void draw();
    void setFont(std::string filepath, int size);
    void changeFontSize(int size);
    int getWidth();
    int getHeight();
    void setColor(int r, int g, int b);
    void intToString(Uint32 number, int x, int y);

private:
    TTF_Font*font;
    SDL_Texture*texture;
    SDL_Rect dst;
    SDL_Rect src;
    SDL_Surface*surface;
    SDL_Color color;
    std::stringstream ss;
    std::string text;


};

#endif // TEXTMANAGER_H
#pragma一次
#ifndef文本管理器
#定义文本管理器
#包括
#包括“graphicsManager.h”
#包括
结构文本管理器{
公众:
textManager(){}
~textManager();
void SetText(std::string msg,intx,inty);
无效抽取();
void setFont(std::string filepath,int size);
void changeFontSize(int size);
int getWidth();
int getHeight();
void setColor(int r、int g、int b);
无效intToString(Uint32编号,整数x,整数y);
私人:
TTF_字体*字体;
SDL_纹理*纹理;
SDL-Rect dst;
SDL__Rect src;
SDL_表面*表面;
SDL_颜色;
std::stringstream-ss;
std::字符串文本;
};
#endif//TEXTMANAGER\u H
//TextManager.cpp的一部分

    void textManager::intToString(Uint32 number, int x, int y)
{
    ss << number;
    text = ss.str().c_str();
    surface = TTF_RenderText_Blended(font, text.c_str(), color);
    if (surface == NULL)
        cout << "surface is NULL \n" << SDL_GetError() << "\n";
    texture = SDL_CreateTextureFromSurface(Gfx::Instance()->getRenderer(), surface);
    SDL_FreeSurface(surface);
    src.x = 0;
    src.y = 0;
    src.w = dst.w = surface->w;
    src.h = dst.h = surface->h;
    dst.x = x;
    dst.y = y;

    SDL_QueryTexture(texture, NULL, NULL, &src.w, &src.h);
    ss.str(std::string().c_str());

}

void textManager::draw()
{
    SDL_RenderCopy(Gfx::Instance()->getRenderer(), texture, &src, &dst);
}


textManager::~textManager()
{
    if (texture != NULL)
        SDL_DestroyTexture(texture);
    font = NULL;
    surface = NULL;
    ss.clear();
    delete surface;
}
void textManager::intToString(Uint32编号,int x,int y)
{
ss getRenderer()、纹理、&src和&dst);
}
textManager::~textManager()
{
如果(纹理!=NULL)
SDL_破坏纹理(纹理);
font=NULL;
表面=零;
ss.clear();
删除曲面;
}

每次调用
textManager::intToString
时,使用
TTF\u RenderText\u Blended
创建曲面,然后从该曲面创建纹理

您正在释放曲面,但看起来您没有对纹理执行相同的操作。这意味着纹理点的每一帧都将被重新分配,但内存不会被释放,从而导致连续的内存泄漏