首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效指针操作TXMLDocument

无效指针操作TXMLDocument
EN

Stack Overflow用户
提问于 2014-09-13 22:24:54
回答 1查看 739关注 0票数 0

我在申请上遇到了一些问题。它过去工作得很好,但是今天当我再次运行它来测试它的时候,我得到了一些Invalid Pointer Operation异常。

这是代码的一部分:这里我声明:

代码语言:javascript
复制
TXMLDocument *xml;

下面几行我构造了它:

代码语言:javascript
复制
xml = new TXMLDocument(NULL);

然后在构造下面的几行代码中加载xml,然后尝试访问名为“root”的根节点:

代码语言:javascript
复制
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:

代码语言:javascript
复制
delete xml;

在这里您可以找到整个函数:http://pastebin.com/MpRf8Gfn

奇怪的是,它过去是工作的,find,现在我从任何地方得到了这个错误(我在源代码中没有任何改变,已经有一个月了,它过去工作得很好)。

如果有人知道为什么会出现这个错误,我将不胜感激。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-18 00:03:42

如果您阅读了文档,那么使用TXMLDocument所有者创建一个NULL实例将使它像一个引用计数接口对象,而不是一个普通对象。因此,您需要遵循正确的引用计数语义,这是您没有做的,因此导致了崩溃。

在这种情况下,最好的方法是使用LoadXMLData()_di_IXMLDocument,例如:

代码语言:javascript
复制
void __fastcall TForm1::dataUpload2ServerServe(TCustomIpClient *ClientSocket)
{
    _di_IXMLDocument xml;
    ...
    xml = LoadXMLData(final_xml.c_str());
    _di_IXMLNodeList root = xml->DocumentElement->ChildNodes;
    ...
    xml->SaveToFile(filename);
    ...
}

xmlroot变量超出作用域时,它们将自动减少引用计数。如果您想手动“释放”它们,只需将NULL赋值给它们:

代码语言:javascript
复制
root = NULL;
xml = NULL;

或者调用他们的Release()方法:

代码语言:javascript
复制
root.Release();
xml.Release();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25828317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档