1
"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;
}
직접 디버깅 할 수없는 이유를 설명해 주시겠습니까? –
해봤습니까? Gdb는 방금 주 소스 파일 (이 객체를 인스턴스화 한 곳)에 힙 손상이 있다고 말했습니다. 그것에 대한 모든 포인터가 너무 효과가있을 것입니다 ... – Shokwav
'valgrind'를 아직 시도해 보셨습니까? –