使用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所做的那样? –