在长时间使用谷歌之后,我仍然无法找到 xmlReaderForMemory 崩溃的原因/解决方案,但仍然具有有效参数。
我已经使用 libxml 创建了两个解析器函数,当我单独调用它们时它们工作正常。但是当我一个接一个调用它时,它在 xmlReaderForMemory 上崩溃,给出错误如下:
nayak.exe 中 0x7c918fea 的第一次机会异常:0xC0000005:访问冲突写入位置 0x00000010。nayak.exe 中 0x7c918fea 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000010。
现在我给出两个函数的代码:
第一个功能:
 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
    }
这两个函数都可以单独工作。但是如果我一个接一个地调用一个函数,那么两个函数都会在上面给定的地方崩溃......同样的错误......请帮助我......