【问题标题】:deleting TXMLDocument object Embarcadero删除 TXMLDocument 对象 Embarcadero
【发布时间】:2013-05-20 08:58:06
【问题描述】:

我有一个要删除的对象:

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
}

【问题讨论】:

  • XMLDocGetMagicBox中没有被删除?
  • 否 - 如果我不删除这个对象,我就会有一些内存泄漏。它不大,但总是这样:/

标签: c++ c++builder delete-operator txmldocument


【解决方案1】:

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

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

【讨论】:

  • 请不要给出仅链接的答案,因为如果链接断开,这些答案将毫无价值。
【解决方案2】:

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

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

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

【讨论】:

  • 对不起,你误会了。我觉得我不能删除这个对象 - XMLDoc。我无法通过行删除 XMLDoc,因为程序在没有任何信息的情况下崩溃,调试也无济于事。我尝试分别使用 delete XMLDoc 和 XMLDoc->free()
  • @user2401015 然后指针在某处被覆盖。分配对象时设置断点,并记下生成的指针地址。如果在您尝试删除指针时它有所不同,那么您将在某处覆盖它。
  • @user2401015 如果调试器足够好,您应该可以在XMLDoc 上添加一个监视,然后如果它发生更改调试器将中断。然后你会发现你的问题出在哪里。
  • 感谢您的建议,但这不是线索。我第一次遇到这种情况,我无法删除对象。我添加了一些代码^^。
猜你喜欢
  • 1970-01-01
  • 2017-06-26
  • 2012-12-16
  • 1970-01-01
  • 2012-09-14
  • 2014-08-14
  • 2011-06-06
  • 2016-01-03
相关资源
最近更新 更多