使用libxml解析文件時出現奇怪的段錯誤。當我將它編譯爲32位應用程序時,此代碼以前可用。我將其更改爲64位應用程序,並停止工作。閱讀xml時地址超出範圍錯誤
賽格的故障出現在 「如果(xmlStrcmp(CUR->名稱,(常量XMLCHAR *) 」服務器「))」
CUR->名稱是一個const XMLCHAR *和它指向的地址這說明了它的出界。但是,當我調試並轉到該內存位置時,該數據是正確的。
int XmlGetServers()
{
xmlDocPtr doc;
xmlNodePtr cur;
doc = xmlParseFile("Pin.xml");
if (doc == NULL)
{
std::cout << "\n Pin.xml not parsed successfully." << std::endl;
return -1;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL)
{
std::cout << "\n Pin.xml is empty document." << std::endl;
xmlFreeDoc(doc);
return -1;
}
if (xmlStrcmp(cur->name, (const xmlChar *) "servers"))
{
std::cout << "\n ERROR: Pin.xml of the wrong type, root node != servers." << std::endl;
xmlFreeDoc(doc);
return -1;
}
}
之前CUR初始化參數name是
Name : name
Details:0xed11f72000007fff <Address 0xed11f72000007fff out of bounds>
CUR初始化後的名稱參數
Name : name
Details:0x64c43000000000 <Address 0x64c43000000000 out of bounds>
引用的XML文件
<?xml version="1.0"?>
<servers>
<server_info>
<server_name>Server1</server_name>
<server_ip>127.0.0.1</server_ip>
<server_data_port>9000</server_data_port>
</server_info>
<server_info>
<server_name>Server2</server_name>
<server_ip>127.0.0.1</server_ip>
<server_data_port>9001</server_data_port>
</server_info>
</servers>
系統:
OS:紅帽企業Linux 6.4的64位
GCC:4.4.7-3
包:libxml2-2.7.6-8.el6_3.4.x86_64
你有64位版本的libxml嗎? – vmg
是libxml2-2.7.6-8.el6_3.4.x86_64 – user758114
您是否曾嘗試使用valgrind運行應用程序,如Sam Varshavchik所做的那樣? –