Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用XMLString::release(XMLCh**buf)_C++_Xml Parsing_Xerces C - Fatal编程技术网

C++ 使用XMLString::release(XMLCh**buf)

C++ 使用XMLString::release(XMLCh**buf),c++,xml-parsing,xerces-c,C++,Xml Parsing,Xerces C,我使用的是xerces-c++我似乎没有真正使用XMLString::release(XMLCh**buf),所以现在每当我想重用这样的局部变量时,我都会使用它: XMLCh* xmlStringVar = XMLString::Transcode("name"); XMLCh* fieldName = fieldsNodeList[NbreFlds]->getAttribute(xmlStringVar)); XMLString::release(&xmlStringVar);

我使用的是xerces-c++我似乎没有真正使用
XMLString::release(XMLCh**buf)
,所以现在每当我想重用这样的局部变量时,我都会使用它:

XMLCh* xmlStringVar = XMLString::Transcode("name");
XMLCh* fieldName = fieldsNodeList[NbreFlds]->getAttribute(xmlStringVar));
XMLString::release(&xmlStringVar);
xmlStringVar = XMLString::Transcode("id");
XMLCh* fieldId = fieldsNodeList[NbreFlds]->getAttribute(xmlStringVar));

如果出现错误,请更正此代码,如果您对函数
XMLString::release有更清晰的描述,请通知我。

看起来非常有效。正如的文档所说,使用它来释放transcode()函数分配的内存。

Xerces文档说:“实现将调用MemoryManager::deallocate并,然后将字符串变为空指针。
要将字符串分配给空指针,需要字符串指针的地址。若只是释放,传递指针(而不是指针的地址)就足够了。

这怎么可能呢!?一旦MemoryManager::deallocate启动,变量就不再存在了—它将被永久删除,那么它如何在删除变量后再次将其变为空指针呢!实际上,删除的是指针指向的内存空间,而不是指针本身。删除后,指针变为悬空指针,这意味着它指向无效的内存位置。为了防止访问无效内存,将悬空指针指定为null是一种很好的做法。好的,现在看来这是合理的!非常感谢,这真的很有帮助。