realloc вызывает утечку памяти в соответствии с valgrind - PullRequest
2 голосов
/ 12 января 2012

Я реализовал метод для перераспределения поля массива структуры.Вальгринд кричит, что это вызывает утечку памяти.

122 689 764 (2 569 440 прямых, 120 120 324 косвенных) байта в 4146 блоках определенно потеряны в записи потерь 39 из 40

Вот мой метод.Есть мысли о том, почему это может произойти?Я позаботился о том, чтобы освободить nodeToReallocate->childPtrTable в конце.И в любом случае в этом случае, я думаю, valgrind укажет на исходный malloc как на проблему, верно?

void reallocatePtrTable(mmUctNode* nodeToReallocate){
    if(nodeToReallocate->ptrRowIndex<nodeToReallocate->PtrTableCapacity){
        return;
    }
    int newSize = (nodeToReallocate->PtrTableCapacity)*INCREASE_FACTOR;
    if(debuglog)printf("(re)Allocating %p with %d bytes. ", nodeToReallocate->childPtrTable,sizeof(mmUctNode*)*newSize);
    fflush(stdout);
    mmUctNode** tmp =(mmUctNode**)realloc(nodeToReallocate->childPtrTable,sizeof(mmUctNode*)*newSize);
    if(!tmp){
        puts("Re-allocation failed");
        free(nodeToReallocate->childPtrTable);
        dump();
        exit(EXIT_FAILURE);
    }
    nodeToReallocate->childPtrTable=tmp;
    if(debuglog)printf(" Got %p\n",nodeToReallocate->childPtrTable);
    nodeToReallocate->PtrTableCapacity=newSize;
    tableReallocations++;
}
...