【发布时间】:2014-11-09 08:52:01
【问题描述】:
我有一个每次运行时使用 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[]不会将内存归还给操作系统。 -
是否将内存返回给操作系统并不重要。重要的是,内存以这样一种方式返回,即未来的分配可以重新使用该内存。无论是通过将其返回给操作系统还是在内部将其标记为未使用都无关紧要。无论哪种方式,你都是对的,重复运行相同的函数不应该导致内存使用的重复增加,这似乎表明某处存在泄漏。
-
你不是
delete在这段代码中你是newing,顺便说一句 -
@WhoCares - 那是因为您的代码错误。您循环一种分配方式,然后以完全不同的方式解除分配。换句话说,你迷失了方向,没有正确地倒车。
-
@WhoCares - MattMcNabb 给你的答案解决了这个问题。
标签: c++ memory-management delete-operator