xmlReaderForMemory在第二次调用时崩溃

在谷歌长时间使用之后,我仍无法找到xmlReaderForMemory崩溃的原因/解决方案,仍然使用有效参数。

我已经使用libxml创建了两个解析器函数,当我单独调用它们工作正常。但是当我一个接一个地调用它时,它会在xmlReaderForMemory上崩溃,给出错误s:

nayak.exe中0x7c918fea的第一次机会exception:0xC0000005:访问冲突写入位置0x00000010。 nayak.exe中0x7c918fea处的未处理exception:0xC0000005:访问冲突写入位置0x00000010。

现在我给出了两个函数的代码:

第一function:

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 } 

第二function:

  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 } 

两个函数都是单独工作正常。但是如果我一个接一个地调用一个函数,那么两个都在上面给出的位置崩溃… ith同样的错误..plz帮助我…..

我觉得这对我来说是幸运的一天,因为我有机会回答我自己的问题……

现在我感到高兴,因为它在任何问题上完全正常工作,问题在于记忆(不是那个,你在听了记忆问题后的想法)。

由于声明,该问题正在提出:

  xmlCleanupParser(); 

因为我用而不是

  xmlInitParser (); 

但现在我不会说出原因,因为你们也应该做一些工作……

我会给你一个帮助我摆脱这个的URL ….