我有一个要删除的对象:
XMLDoc = new TXMLDocument(NULL);
但我不知道该怎么做......它不起作用:
delete XMLDoc;
XMLDoc->free();
当我尝试删除对象时程序崩溃。
所以这是我的一部分代码。我上课了:
class C_XMLhandler{
private:
TXMLDocument *XMLDoc;
...
...
public:
void loadXMLfile(String name);
...
...
};
and example declaration of method:
bool C_XMLhandler::loadXMLfile(String name)
{
XMLDoc = new TXMLDocument(NULL);
Box=GetMagicBox(XMLDoc); //it's XML parser method, and it's doesen't matter
delete XMLDoc; //when i reach this line the program scrashes
}
答案 0 :(得分:1)
这是因为在调用现在删除的对象中的delete
方法之前,您free
了对象。
执行delete XMLDoc
时,为XMLDoc
分配的内存被标记为空,并执行对象析构函数。现在,当在调用XMLDoc->free()
时使用指针时,您正在访问不再分配的内存,并且您遇到未定义的行为,这有时会导致崩溃。
首先应检查对象析构函数中是否未调用free
方法,如果不是,则反过来执行此操作。 如果在析构函数中调用 free
,则根本不需要调用它。
答案 1 :(得分:1)
http://docwiki.embarcadero.com/Libraries/XE6/en/Xml.XMLDoc.TXMLDocument.Destroy
该对象被连接到new(这个)的组件删除,否则不太确定,我在某处读到它被自动删除。 (HMMM)