Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C xmlReaderForMemory在第二次调用时崩溃_C_Libxml2 - Fatal编程技术网

C xmlReaderForMemory在第二次调用时崩溃

C xmlReaderForMemory在第二次调用时崩溃,c,libxml2,C,Libxml2,在使用google很长一段时间后,我无法找到XmlReaderMemory崩溃的原因/解决方案,仍然使用有效的参数 我已经使用libxml创建了两个解析器函数,当我单独调用时,它们工作正常。但是当我一个接一个地调用时,它会在XMLReaderMemory上崩溃,给出错误s,如下所示: nayak.exe中0x7c918fea处的首次机会异常:0xC0000005:访问冲突写入位置0x00000010。 nayak.exe中0x7c918fea处的未处理异常:0xC0000005:访问冲突写入位置

在使用google很长一段时间后,我无法找到XmlReaderMemory崩溃的原因/解决方案,仍然使用有效的参数

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

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
    }

这两个函数各自工作正常。但是如果我调用一个又一个函数,那么两个函数都会在上述给定位置崩溃…出现相同的错误..请帮助我..

我认为这是我的幸运日,因为我有机会回答我自己的问题

现在我很高兴,因为它在我这边工作得非常好,没有任何问题,问题是记忆(不是你在听了“记忆问题”这个词后的想法)

之所以提出这个问题,是因为声明:

     xmlCleanupParser();
就像我用的,而不是

   xmlInitParser ();

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


我会给你们帮助我摆脱困境的方法……

“但现在我不会给出原因,因为你们也应该做一些工作……”沃特