C xmlReaderForMemory在第二次调用时崩溃
在使用google很长一段时间后,我无法找到XmlReaderMemory崩溃的原因/解决方案,仍然使用有效的参数 我已经使用libxml创建了两个解析器函数,当我单独调用时,它们工作正常。但是当我一个接一个地调用时,它会在XMLReaderMemory上崩溃,给出错误s,如下所示: nayak.exe中0x7c918fea处的首次机会异常:0xC0000005:访问冲突写入位置0x00000010。 nayak.exe中0x7c918fea处的未处理异常:0xC0000005:访问冲突写入位置0x00000010 现在我给出两个函数的代码: 第一个功能:C xmlReaderForMemory在第二次调用时崩溃,c,libxml2,C,Libxml2,在使用google很长一段时间后,我无法找到XmlReaderMemory崩溃的原因/解决方案,仍然使用有效的参数 我已经使用libxml创建了两个解析器函数,当我单独调用时,它们工作正常。但是当我一个接一个地调用时,它会在XMLReaderMemory上崩溃,给出错误s,如下所示: nayak.exe中0x7c918fea处的首次机会异常:0xC0000005:访问冲突写入位置0x00000010。 nayak.exe中0x7c918fea处的未处理异常:0xC0000005:访问冲突写入位置
char* CB_omniParser(char *omnistring){
char *parseResult,;
const char *fileName = omnistring;
char *temp,*texttemp,*result=0;
int i,len=0,error;
xmlTextReaderPtr reader;
len= strlen(omnistring);
if(len==0)
return 0;
reader = xmlReaderForMemory(fileName,len,"",NULL,0);
if(reader){
temp = (char *) GlobalAlloc(GPTR, sizeof(char)*len);
parseResult = (char *) GlobalAlloc(GPTR,sizeof(char)*len+1);
while(error=xmlTextReaderRead(reader)) {
if(error==-1){
return 0; // on failure
}
switch(xmlTextReaderNodeType(reader)) {
case XML_READER_TYPE_ELEMENT:
temp = (char *)xmlTextReaderConstName(reader);
strcat(parseResult,temp);
strcat(parseResult,"#");
xmlTextReaderMoveToElement(reader);
continue;
case XML_READER_TYPE_TEXT:
temp = (char *)xmlTextReaderConstValue(reader);
strcat(parseResult,temp);
strcat(parseResult,"|");
continue;
}
}
xmlFreeTextReader(reader);
xmlCleanupParser();
return parseResult;//on success returns the parsed omni string
}
else
return 0; // on failure
}
第二个功能:
char* CB_xmlParserFromMemory(char *xmlstring){
char *xmlParseresult;
char *temp;
int i,len,,error;;
xmlTextReaderPtr reader1;
len= strlen(xmlstring);
if(len==0)
return 0;
reader1 = xmlReaderForMemory(xmlstring,len,NULL,NULL,0);
if(reader1){
temp = (char *) GlobalAlloc(GPTR, sizeof(char)*len);
while(error=xmlTextReaderRead(reader1)) {
if(error==-1){
return 0; // on failure
}
switch(xmlTextReaderNodeType(reader1)) {
case XML_READER_TYPE_ELEMENT:
temp = (char *)xmlTextReaderConstName(reader1);
strcat(xmlParseresult,"\"");
strcat(xmlParseresult,temp);
strcat(xmlParseresult,"\"");
strcat(xmlParseresult,":");
xmlTextReaderMoveToElement(reader1);
continue;
case XML_READER_TYPE_TEXT:
temp = (char *)xmlTextReaderConstValue(reader1);
strcat(xmlParseresult,"\"");
strcat(xmlParseresult,temp);
strcat(xmlParseresult,"\"");
strcat(xmlParseresult,",");
continue;
}
}
xmlCleanupParser();
xmlFreeTextReader(reader1);
GlobalFree(temp);
return xmlParseresult;//on success returns the parsed omni string
}
else
return 0; // on failure
}
这两个函数各自工作正常。但是如果我调用一个又一个函数,那么两个函数都会在上述给定位置崩溃…出现相同的错误..请帮助我..我认为这是我的幸运日,因为我有机会回答我自己的问题 现在我很高兴,因为它在我这边工作得非常好,没有任何问题,问题是记忆(不是你在听了“记忆问题”这个词后的想法) 之所以提出这个问题,是因为声明:
xmlCleanupParser();
就像我用的,而不是
xmlInitParser ();
但现在我不会给出原因,因为你们也应该做一些工作
我会给你们帮助我摆脱困境的方法……“但现在我不会给出原因,因为你们也应该做一些工作……”沃特