我正在创建一个程序,在动态分配一个整数数组时,我尝试在我创建它的同一个函数中从堆中删除该数组。但是 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。
任何人都可以给我任何关于如何释放这段记忆的建议吗?
可能是这样的:
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;
}