奇怪的堆损坏问题
Strange Heap Corruption Issue?
由于某种原因,我从下面的类定义文件中得到了一个奇怪的堆损坏,很可能是在"CreateFromNode"函数中。有人能帮我一下吗?既然我抓住了它,我真的很想现在就处理它,而不是让它在以后显现出来。此外,没有外部力量修改这个类的任何成员(或它的成员)。
#include "Object.h"
TmxMap::Object::Object():name(), position(), size(), gid(-1), visible(true),
properties(), image(), polygon(NULL), polyline(NULL), ellipse(false){}
TmxMap::Object::Object(rapidxml::xml_node<>* const& object_node):name(),
position(), size(), gid(-1), visible(true), properties(), image(),
polygon(NULL), polyline(NULL), ellipse(false){
CreateFromNode(object_node);
}
TmxMap::Object::Object(TmxMap::Object const& from):name(from.name),
position(from.position), size(from.size), gid(from.gid),
visible(from.visible), properties(from.properties),
image(from.image), polygon(from.polygon), polyline(from.polyline),
ellipse(from.ellipse){}
TmxMap::Object::~Object(){
DeleteObjects();
}
void TmxMap::Object::CreateFromNode(rapidxml::xml_node<>* const& object_node){
DeleteObjects();
rapidxml::xml_node<>* data_node = NULL;
rapidxml::xml_attribute<>* data_attrib = NULL;
if((data_attrib = object_node -> first_attribute("name")))
name = data_attrib -> value();
if((data_attrib = object_node -> first_attribute("width")))
size.x = std::strtol(data_attrib -> value(), NULL, 10);
if((data_attrib = object_node -> first_attribute("height")))
size.y = std::strtol(data_attrib -> value(), NULL, 10);
position.Set(
std::strtol(object_node -> first_attribute("x") -> value(), NULL, 10),
std::strtol(object_node -> first_attribute("y") -> value(), NULL, 10)
);
if((data_node = object_node -> first_node("polygon")))
polygon = new Polygon2D<int>(data_node);
if((data_node = object_node -> first_node("polyline")))
polyline = new Polyline2D<int>(data_node);
ellipse = (object_node -> first_node("ellipse") != NULL);
}
void TmxMap::Object::DeleteObjects(){
if(polygon){delete polygon; polygon = NULL;}
if(polyline){delete polyline; polyline = NULL;}
}
void TmxMap::Object::Destroy(){
name.clear();
position.Set();
size.Set();
gid = 0;
visible = true;
properties.Destroy();
image.Destroy();
DeleteObjects();
ellipse = false;
}
复制构造函数复制指针polygon
和polyline
。
这将导致它们被多次删除。
你应该复制那些对象,而不是指针。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 为什么会发生堆损坏
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 数组问题:变量周围的堆栈'arr'已损坏
- 我不知道为什么会发生堆损坏(关于内存分配问题)
- 调试堆栈损坏问题
- 问题是将数据写入特定单元格并且文件已损坏
- PDF下载损坏 / HTTP标头问题
- gcovr-在xml覆盖Cobertura报告中是否存在损坏文件名的已知问题
- 使用快速英特尔随机生成器(SSE2)会因堆栈问题而失败..已损坏
- 在c++中添加int数组时,试图找出堆栈损坏的问题
- 堆损坏/坏分配问题立即在主
- 奇怪的DllImport问题,当传递一个LONG参数内存损坏
- 奇怪的堆损坏问题
- C/ c++程序中的堆栈损坏问题