0

我有一个要删除的对象:

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
}
4

2 回答 2

1

这是因为您delete在调用free现在删除的对象中的方法之前的对象。

当您这样做时delete XMLDoc,分配的内存XMLDoc被标记为空闲,并执行对象析构函数。现在,当在调用中使用指针时,XMLDoc->free()您正在访问不再分配的内存,并且您会遇到未定义的行为,这有时会导致崩溃。

您应该首先检查该free方法是否没有在对象析构函数中调用,如果没有,则反之。如果 free在析构函数中调用,则根本不需要调用它。

于 2013-05-20T09:00:45.350 回答
1

http://docwiki.embarcadero.com/Libraries/XE6/en/Xml.XMLDoc.TXMLDocument.Destroy

该对象被它连接到新(this)的组件删除,否则不太确定,我在某处读到它是自动删除的。(嗯)

于 2015-01-21T03:58:46.120 回答