如何解决删除数组时出现“ 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 举报,一经查实,本站将立刻删除。