rapidxml新增屬性的記憶體分配問題

2021-06-03 06:28:00 字數 795 閱讀 4228

今天在用rapidxml生成xml的時候碰到了乙個奇怪的問題

rapidxml::xml_node<>* srvnode = doc.allocate_node(rapidxml::node_element,iter->m_name.c_str(),"");

生成的xml,其他地方都正常,就「ftpport」的屬性總是顯示亂碼,開始以為是tostring函式的問題,但是我換了一種轉換方式後這個問題依然存在,同時我除錯的時候看到的tostring

的返回值也正常,最後和同時討論後,他給我解釋rapidxml的函式在建立新節點或者屬性的時候,傳入的引數要麼是由內部分配器分配的記憶體要麼應該指向一塊短期內不會被釋放的記憶體。

原來如此,於是我改了**之後

rapidxml::xml_node<>* srvnode = doc.allocate_node(rapidxml::node_element,iter->m_name.c_str(),"");

char* port = doc.allocate_string(tostring(iter->m_ftpport).c_str());

亂碼的問題果然消失了,原來allocate_attribute方法建立乙個屬性的時候,attribute的m_value指標只是簡單的指向了一塊記憶體位址,在後期將doc寫入檔案,會將attribute轉化為字串,如果此時m_value指向的位址記憶體被釋放的話,那麼就會出現我先的問題了。所以我的解決方案就是用rapidxml自己的記憶體池分配一塊記憶體,儲存m_value指向的值,這樣就ok了。

寫在這裡純粹是做個記錄,希望對某些同志也有幫助!

rapidxml 解析修改記憶體的值

1 使用rapidxml解析的時候,也就是 呼叫xmldoc.parse 0 xmlcontent 特別注意,rapidxml會修改記憶體的值,把右尖括號 修改為 0 因此特別注意,如果char指標指向的內容還要使用,需要做個備份。2 如果char指標指向的內容,不再使用,不需要做備份,rapidx...

分類新增屬性

import classa.h inte ce classa test property cpoy,nonatomic nsstring str void test1 end 分類不可以直接新增屬性,但是如果你直接新增屬性則會報錯。如上,如果為classa 新增屬性,再編譯時不會報錯,但是再執行階段...

Spring mvc Model新增屬性

為了讓模板引擎知道這些變數的值,我們需要在 controller做一些工作 import org.springframework.ui.model public string index pathvariable id long id,model model 這裡我們模擬一些資料 model.add...