2012-03-26 4 views
1

xerces-C++を使用しています。私は実際にXMLString::release (XMLCh ** buf)を使用しているようには見えないので、今すぐ再利用するたびに使用しています。このようなローカル変数: 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のより明確な説明を得た場合お知らせください。

答えて

1

完全に正しいと思われます。 XMLString::releaseのドキュメントでは、transcode()関数によって割り当てられたメモリを解放するためにこのコードを使用しています。

1

Xercesのドキュメントは言う:「実装はMemoryManagerを呼び出します::割り当てを解除し、その後、NULLポインタに文字列を回し。」 、それは文字列ポインタのアドレスを必要とNULLポインタに文字列を割り当てるには。割り当て解除だけだった場合は、(ポインタのアドレスの代わりに)ポインタを渡すだけで十分です。

+0

どうすれば可能ですか?いったんMemoryManager :: deallocateが起動されると、変数はもはや存在しないので、削除された後、再び変数をヌルポインタに変えます。 – Glolita

+0

実際にポインタ**が指す**メモリ空間は、ポインタ自体ではなく削除されます。この削除の後、ポインタはダングリングポインタになり、無効なメモリ位置を指していることを意味します。無効なメモリにアクセスするのを防ぐために、ダングリングポインタをnullに割り当てるのがよい方法です。 – xaero99

+0

よろしくお願いします。本当に助けてくれてありがとう。 – Glolita

関連する問題