Member 11671035 Ответов: 1

Пользователь mxml и пользователь valgrind имеют утечку памяти


Это код:
главный:
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include"mxml.h"

int main(int argc,char **arv)
{
    FILE *fp;
    mxml_node_t *tree,*node;

    fp = fopen("test.xml", "r");
    if(fp == NULL)
    {
      return 1;
    }
    tree = mxmlLoadFile(NULL, fp,MXML_OPAQUE_CALLBACK);
    fclose(fp);

    mxml_node_t *id,*password;
    
    node = mxmlFindElement(tree, tree, "note",
                           NULL, NULL,MXML_DESCEND
                            /*MXML_DESCEND*/);
    id = mxmlFindElement(node, tree, "id",
                           NULL, NULL,
                          MXML_DESCEND);
    printf("[%s]\n",id->child->value.opaque); 
    
    password = mxmlFindElement(node, tree, "password",
                           NULL, NULL,
                           MXML_DESCEND);                          

    printf("[%s]\n",password->child->value.opaque);
  

    mxmlDelete(tree);
    
    return 0;
}

XML:
<note >
<id>1362 653</id>
<password>123456 POMHTUY</password>
</note>

Затем пользователь valgrind result:
valgrind --tool=memcheck --leak-check=yes ./main
==27151== Memcheck, a memory error detector
==27151== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==27151== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==27151== Command: ./main
==27151== 
==27151== 
==27151== HEAP SUMMARY:
==27151==     in use at exit: 149 bytes in 6 blocks
==27151==   total heap usage: 22 allocs, 16 frees, 933 bytes allocated
==27151== 
==27151== 149 (88 direct, 61 indirect) bytes in 2 blocks are definitely lost in loss record 3 of 3
==27151==    at 0x4006041: calloc (vg_replace_malloc.c:593)
==27151==    by 0x804C875: mxml_new (mxml-node.c:805)
==27151==    by 0x804CA1A: mxmlNewElement (mxml-node.c:392)
==27151==    by 0x804A0E4: mxml_load_data (mxml-file.c:1955)
==27151==    by 0x804A8A8: mxmlLoadFile (mxml-file.c:164)
==27151==    by 0x80488FC: main (exeso.c:14)
==27151== 
==27151== LEAK SUMMARY:
==27151==    definitely lost: 88 bytes in 2 blocks
==27151==    indirectly lost: 61 bytes in 4 blocks
==27151==      possibly lost: 0 bytes in 0 blocks
==27151==    still reachable: 0 bytes in 0 blocks
==27151==         suppressed: 0 bytes in 0 blocks
==27151== 
==27151== For counts of detected and suppressed errors, rerun with: -v
==27151== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 12 from 8)

Mxml - это v2. 10.

Что я уже пробовал:

How can i do? Thanks

1 Ответов

Рейтинг:
1

Jochen Arndt

Видеть mxml/CHANGES.md at master · michaelrsweet/mxml · GitHub[^]:

Цитата:
Изменения в Mini-XML 2.11
...
Исправлена утечка памяти в mxmlDelete (выпуск №183)

Поэтому вам следует перейти на версию 2.11.


CPallini

5.