[xml] Help, dont get back allocated memory!



Hello,

I have a xml file i want to parse. This part works so far. 
But my problem is that my xml file has a size of 20 MiB and more. So, if i work with such a file, then i can 
see that the allocated memory is not given back to the system after i call the mentioned free operations 
xmlFreeDoc(doc) and xmlFreeParserCtxt(). As far as i just create the doc tree and call the free operations i 
could "repair" the memory usage by calling malloc and free the allocated memory, but as soon as i touch the 
node contents in any way (see for-loop) i can't get the memory given back to the system!

And here is my code sample:

    xmlParserCtxtPtr ctxt; /* the parser context */
    xmlDocPtr doc; /* the resulting document tree */

    /* create a parser context */
    ctxt = xmlNewParserCtxt();
    if (ctxt == NULL) {
        fprintf(stderr, "Failed to allocate parser contextn");
return -12;
    }
    /* parse the file, activating the DTD validation option */
    doc = xmlCtxtReadFile(ctxt, nodeCoordinateSource, NULL, 0);

    /* check if parsing suceeded */
    if (doc == NULL) {
        fprintf(stderr, "Failed to parse %sn", nodeCoordinateSource);
    } else {
// /* check if validation suceeded */
//        if (ctxt->valid == 0)
//      fprintf(stderr, "Failed to validate %sn", nodeCoordinateSource);

        xmlNode *root = xmlDocGetRootElement(doc);

        /* get NodeRecords */
        if(root->type == XML_ELEMENT_NODE) {
         int found;
         xmlAttr *attr;
         const xmlChar *match = (const xmlChar *)"dimensions";

         for(attr = root->properties, found = 0; attr && !found; attr = (xmlAttr *)attr->next) {
if(!xmlStrcmp(attr->name, match)) {
dimensions = atoi((const char *)attr->children->content);
found = 1;
}
}
         attr = NULL;
         root = NULL;
        }

        /* free up the resulting document */
        xmlFreeDoc(doc);
        xmlFreeParserCtxt(ctxt);

        /* repair memory usage */
        ptr = (void *)malloc(1024*1024);
        free(ptr);
    }

Has anyone an idea how i can fix this?

Regards
Viktor






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]