我在申请上遇到了一些问题。它过去工作得很好,但是今天当我再次运行它来测试它的时候,我得到了一些Invalid Pointer Operation异常。
这是代码的一部分:这里我声明:
TXMLDocument *xml;下面几行我构造了它:
xml = new TXMLDocument(NULL);然后在构造下面的几行代码中加载xml,然后尝试访问名为“root”的根节点:
xml->LoadFromXML(AnsiString(final_xml.c_str()));
//at the line below i am getting the Invalid Pointer Operation exception.
_di_IXMLNodeList root = xml->ChildNodes->GetNode("root")->GetChildNodes();在函数的末尾,我将删除xml:
delete xml;在这里您可以找到整个函数:http://pastebin.com/MpRf8Gfn
奇怪的是,它过去是工作的,find,现在我从任何地方得到了这个错误(我在源代码中没有任何改变,已经有一个月了,它过去工作得很好)。
如果有人知道为什么会出现这个错误,我将不胜感激。提前谢谢。
发布于 2014-09-18 00:03:42
如果您阅读了文档,那么使用TXMLDocument所有者创建一个NULL实例将使它像一个引用计数接口对象,而不是一个普通对象。因此,您需要遵循正确的引用计数语义,这是您没有做的,因此导致了崩溃。
在这种情况下,最好的方法是使用LoadXMLData()和_di_IXMLDocument,例如:
void __fastcall TForm1::dataUpload2ServerServe(TCustomIpClient *ClientSocket)
{
_di_IXMLDocument xml;
...
xml = LoadXMLData(final_xml.c_str());
_di_IXMLNodeList root = xml->DocumentElement->ChildNodes;
...
xml->SaveToFile(filename);
...
}当xml和root变量超出作用域时,它们将自动减少引用计数。如果您想手动“释放”它们,只需将NULL赋值给它们:
root = NULL;
xml = NULL;或者调用他们的Release()方法:
root.Release();
xml.Release();https://stackoverflow.com/questions/25828317
复制相似问题