为什么这是 valgrind 的内存泄漏?

问题描述 投票:0回答:1

我正在创建一个程序,在动态分配一个整数数组时,我尝试在我创建它的同一个函数中从堆中删除该数组。但是 valgrind 说在退出时肯定有 20 个字节丢失/正在使用。

这里是函数:

int whoStarts(Parent* parents, int num){
int* connects =  new int[num];
for(int i = 0; i < num; i++){
    connects[i] = 0;
}

for(int i = 0; i < num;i++){
    for(int j = 0; j < num; j++){
        if(parents[i].name == parents[j].connectedName){
            connects[i]++;
        }
    }
}

for (int i = 0;i < num;i++){
    if(connects[i] == 0){
        return i;
    }
}

delete [] connects;

return 0;
}`

我不确定为什么内存没有被释放,我在一个函数中创建了另一个动态分配的数组,为结构数组返回一个指向 main 的指针,但我在 main 函数中删除了那个。 Valgrind 指出这个错误:

==820297== 20 bytes in 1 block 肯定丢失在 loss record 1 of 1 ==820297== 在 0x4C38B6F:operator new[](unsigned long) (vg_replace_malloc.c:640) ==820297== by 0x402254: whoStarts(Parent*, int) (phone_tree.cpp:114) ==820297== by 0x401C39: main (phone_tree.cpp:38)

在第 38 行,我将 whoStarts 函数返回的值赋给一个 int。

任何人都可以给我任何关于如何释放这段记忆的建议吗?

c++ heap-memory
1个回答
0
投票

可能是这样的:

int whoStarts(Parent* parents, int num){
int* connects =  new int[num];
int status = 0;
for(int i = 0; i < num; i++){
    connects[i] = 0;
}

for(int i = 0; i < num;i++){
    for(int j = 0; j < num; j++){
        if(parents[i].name == parents[j].connectedName){
            connects[i]++;
        }
    }
}

for (int i = 0;i < num;i++){
    if(connects[i] == 0){
        status = i;
        break;
    }
}

delete [] connects;

return status;
}
© www.soinside.com 2019 - 2024. All rights reserved.