根据valgrind,realloc导致内存泄漏

时间:2012-01-12 13:20:40

标签: c memory-leaks valgrind realloc

我已经实现了一个方法来重新分配struct的数组字段。 Valgrind大喊这会导致内存泄漏。

  4,146个街区中的122,689,764(2,569,440直接,120,120,324个间接)字节肯定会在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++;
}

0 个答案:

没有答案