微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除数组时出现“ free:在tcache 2中检测到双重释放”

如何解决删除数组时出现“ free:在tcache 2中检测到双重释放”

我正在用C ++ / SFML编写2D游戏引擎,但遇到一个我无法弄清楚的问题:

所以,我在这里有这个课:

class StringInfo : public Object
{
    public:
        inline StringInfo(void) { m_data = NULL; m_string = ""; m_bitmapFont = NULL; invalidate(); }
        ~StringInfo(void);
        void create(String _string,BitmapFont& font,Color color);
        inline TexInfo* getData(void) { return m_data; }
        inline uint32 length(void) { return m_string.length(); }
        inline String getString(void) { return m_string; }
        inline char at(uint32 index) { return m_string[index]; }

    private:
        TexInfo* m_data;
        String m_string;
        BitmapFont* m_bitmapFont;
};

这是实现:

StringInfo::~StringInfo(void)
{
    if (m_data != NULL)
    {
        delete[] m_data;
        m_data = NULL;
    }
    m_bitmapFont = NULL;
}

void StringInfo::create(String _string,Color color)
{
    if (_string.trim() == "")
    {
        GameData::instance().errorQueue.push(Error::EMPTY_STRING,ERROR_DATA());
        return;
    }
    m_string = _string;
    m_bitmapFont = &font;

    m_string = String(" ").add(m_string);
    m_data = new TexInfo[m_string.length()];
    for (uint32 i = 0; i < m_string.length(); i++)
        m_data[i] = font.getChar(m_string.at(i),color);

    setValid(true);
}

这在Windows / MinGW上运行良好,但是在Linux上,此行出现错误“ free():在tcache 2中检测到双重释放”:

delete[] m_data;

我不知道为什么,我的操作方式出了什么问题?

以防万一,这里是TexInfo结构

struct TexInfo
{
    FPoint texCoords;
    FPoint texSize;
    Color tintColor;

    TexInfo(FPoint coords = FPoint(-1,-1),FPoint size = FPoint(0,0),Color tint = Color::White)
    {
        texCoords = coords;
        texSize = size;
        tintColor = tint;
    }
};

这里没有动态分配蜜​​蜂,FPoint和Color都只有一些浮点数和整数。

解决方法

我不知道为什么,我的操作方式出了什么问题?

这可能很难读-但是这种设计将无法生存

TexInfo* m_data;
BitmapFont* m_bitmapFont;

除非您采取极端措施。

必须学习RAII,并遵循3/5/0的规则,不要将坟墓挖得很深。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。