C++ 使用xerces for c+调用getDocument时出现分段错误+;
你好。我有parser.h和sample.cpp(作为父节点)和main.cpp。我越来越 获取getDocument时出现分段错误。谁能帮我。。。这是我的密码: parser.hC++ 使用xerces for c+调用getDocument时出现分段错误+;,c++,xerces,xerces-c,C++,Xerces,Xerces C,你好。我有parser.h和sample.cpp(作为父节点)和main.cpp。我越来越 获取getDocument时出现分段错误。谁能帮我。。。这是我的密码: parser.h int Parser::Load(const char* xmlFile) { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) {
int Parser::Load(const char* xmlFile) {
try {
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Error during initialization! :\n"
<< message << "\n";
XMLString::release(&message);
return 1;
}
XercesDOMParser* parser = new XercesDOMParser();
parser->setValidationScheme(XercesDOMParser::Val_Always);
parser->setDoNamespaces(true);
ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
parser->setErrorHandler(errHandler);
try {
parser->parse(xmlFile);
}
catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (const DOMException& toCatch) {
char* message = XMLString::transcode(toCatch.msg);
cout << "Exception message is: \n"
<< message << "\n";
XMLString::release(&message);
return -1;
}
catch (...) {
cout << "Unexpected Exception \n";
return -1;
}
}
int解析器::加载(const char*xmlFile){
试试{
XMLPlatformUtils::Initialize();
}
catch(constxmleexception&toCatch){
char*message=XMLString::transcode(toCatch.getMessage());
cout setErrorHandler(errHandler);
试试{
解析器->解析(xmlFile);
}
catch(constxmleexception&toCatch){
char*message=XMLString::transcode(toCatch.getMessage());
cout-getNodeAttribute(xmlParser->xmlNode);
}
main.cpp
void Sample::getXmlNodes(ParseXml* xmlParser){
map<std::string, std::string> attribList;
xmlParser->xmlDoc = xmlParser->parser->getDocument();
xmlParser->xmlNode = xmlParser->xmlDoc->getFirstChild();
attribList = xmlParser->getNodeAttribute(xmlParser->xmlNode);
}
#include "parser.h"
#include "sample.cpp"
int main(int argc,char **argv){
const char* xmlString="sample.xml";
Parser* xmlObj;
Sample sampObj;
xmlObj->Load(xmlString);
sampObj.getXmlNodes(xmlObj);
cout << "Done creating object..." << endl;
xmlObj->Cleanup();
return 0;
}
#包括“parser.h”
#包括“sample.cpp”
intmain(intargc,字符**argv){
const char*xmlString=“sample.xml”;
解析器*xmlObj;
样品sampObj;
xmlObj->Load(xmlString);
sampObj.getXmlNodes(xmlObj);
cout您没有为xmlObj
objetc分配内存:
Parser* xmlObj;
Sample sampObj;
xmlObj->Load(xmlString); // SIGSEV here, you have no object to invoke
必须替换为:
Parser xmlObj;
Sample sampObj;
xmlObj.Load(xmlString);
sampObj.getXmlNodes(&xmlObj);
获取getDocument时仍然出错。我尝试了XercesDOMParser*parser;DOMDocument*xmlDoc;xmlDoc=parser->getDocument();我得到了0个属性计数发布调试回溯并完成示例代码。我不明白什么是XercesDOMParser*parser;DOMDocument*xmlDoc;xmlDoc=parser->getDocument()
的意思是。但是,如果没有更多信息,我假设您没有为XercedomParser
objetc分配内存,同样,您使用它们时没有有效的内存分配。为什么使用指针?在类似XercedomParser;DOMDocument*xmlDoc=parser.getDocument()的情况下是否有任何问题代码如下:void Sample::getXmlNodes(ParseXml*xmlParser){map attribList;XercesDOMParser*parser;DOMDocument*xmlDoc;xmlDoc=parser->getDocument();//xmlParser->xmlDoc=xmlParser->getDocument();DOMNode*xmlNode=xmlParser->->getFirstChild();attribList=xmlParser->getNodeAttribute(xmlParser->xmlNode);}我认为Parser->parse(xmlString)中有问题,因为调用getDocument时我得到了Null。我想我没有通过xmlObj->Load(xmlString);对。任何解决方案?如果不为其分配内存,您就不能使用解析器
。请将xercedomparser*解析器;DOMDocument*xmlDoc;xmlDoc=parser->getdoc()
替换为xercedomparser;DOMDocument*xmlDoc;xmlDoc=parser.getdoc()