2012-03-26 28 views
1

我使用的Xerces-C++我似乎並沒有真正得到使用XMLString::release (XMLCh ** buf)所以現在我每次使用它,我想重新使用局部變量是這樣的:使用了XmlString ::釋放(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更清楚的說明,請通知我。

回答

1

看起來非常有效。如XMLString::release的文檔所述,使用它來釋放由transcode()函數分配的內存。

1

Xerces的文件說:「實施將調用的MemoryManager ::取消分配和然後打開字符串一個空指針。」 到字符串賦值給一個空指針它需要字符串指針的地址。如果只是釋放,傳遞指針(而不是指針的地址)就足夠了。

+0

這怎麼可能!一旦MemoryManager :: deallocate被啓動,變量就不存在了,它已經被刪除了,所以在刪除變量後它又是如何將變量變爲空指針的! – Glolita 2012-03-26 14:22:18

+0

實際上,指針**指向的**內存空間被刪除,而不是指針本身。刪除之後,指針變成一個懸掛指針,這意味着它指向一個無效的內存位置。爲了防止訪問無效內存,最好將懸掛指針分配給null。 – xaero99 2012-03-26 18:34:09

+0

好的,現在看起來很合理!非常感謝,這真的很有幫助。 – Glolita 2012-03-27 10:08:43

相關問題