我有一个函数,每次运行时都使用0.5 MB的内存.所以我决定一步一步地观察Windows任务管理器来逐步调查它.我注意到这些线后:
int **banned;
banned=new int*[vertices];
for(i=0;i<vertices;i++)
banned[i]=new int[k_colors];
Run Code Online (Sandbox Code Playgroud)
它使用0.5 MB内存.然后我决定return在行前删除它:
for(i=0;i<vertices;i++)
for(j=0;j<k_colors;j++)
delete []banned[j];
delete[]banned;
Run Code Online (Sandbox Code Playgroud)
使用函数的开头是8,5 MB内存.分配后,它变为9 MB,但在删除部分后,它仍然是9 MB.我在整个程序中执行此功能1000次.然后它被OS杀死了.知道为什么会这样,我该如何解决?
编辑:这里的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;
}
Run Code Online (Sandbox Code Playgroud)
上面,elitism()函数的第一行是分配部分,最后一行是delete部分.