gpt4 book ai didi

c++ - delete[] 在 C++ 中真的有效吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:56:52 27 4
gpt4 key购买 nike

我有一个函数,每次运行它都会使用 0.5 MB 内存。于是我决定一边观察Windows任务管理器,一边一步步调查。我注意到这些行之后:

int **banned;
banned=new int*[vertices];
for(i=0;i<vertices;i++)
banned[i]=new int[k_colors];

它使用 0,5 MB 内存。然后我决定在 return 行之前删除它:

for(i=0;i<vertices;i++)
for(j=0;j<k_colors;j++)
delete []banned[j];
delete[]banned;

函数开头使用了 8.5 MB 内存。分配后变成了9MB,删除部分后还是9MB。我在整个程序中执行了这个函数 1000 次。然后它被操作系统杀死。知道这是为什么吗?我该如何解决?

编辑:这里是 main() 部分:

int main()
{
srand(time(0));
input();
initialize();
for(int i = 0; i < MAX_GENERATION; i++)
{
parents = selection(TS);
population = cross_over(parents, PC);
mutation(PM);
elite=tabu_search(population);
elitism(); //270 MB memory using each time.

}
fclose(pFile);
return 0;
}

以上,在elitism()函数中,第一行是分配部分,最后一行是delete部分。

最佳答案

要正确使用delete[],您应该删除您新建的相同内容:

for(i=0;i<vertices;i++)
delete [] banned[i];

delete[] banned;

您的“进程被杀死”可能是因为您的原始代码导致了大量未定义的行为,多次删除同一个指针等等。

此版本可能会也可能不会向操作系统释放内存;这是您的编译器/库和操作系统做出的决定。在某些系统上,内存似乎仍分配给您的进程,但如果另一个进程需要它,操作系统将能够声明它。

如果你一遍又一遍地调用同一个函数,它不应该积累内存;先前被删除的 block 可以响应新的调用。

关于c++ - delete[] 在 C++ 中真的有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826575/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com