这是我的代码:
int** tmp = new int*[l];
for(int i = 0; i < l; i++)
tmp[i] = new int[h];
for(int i=0;i< l;i++)
delete[] tmp[i];
delete[] tmp;
Run Code Online (Sandbox Code Playgroud)
我想知道我是否正确释放内存.我遇到的问题是,当我在任务管理器上检查我的程序进程时,内存不会丢失.
这是正常的吗?
上面的代码是可以的,一般来说,这是你希望你在代码库中永远不会遇到的那种可怕的事情.
std::vector或者boost::multi_array在这里都是更好的选择,并且它们会在没有所有不必要的容易出错的代码的情 基本上如果你不得不想知道代码在做什么以及它是否正确,那么它已经出现了问题.
CPU负载没有直接连接到内存分配,这只是代码中的另一个问题.一些循环无休止地轮询操作系统的某些东西可能是一个原因; 除了分配和释放内存之外,我没有关于你的代码正在做什么的信息,因此很难说可以改进什么.
评论之后......不要依赖任务管理器来告诉你程序的实际内存使用情况.使用专门的检漏仪.正如@ H2CO3指出的那样,OS可能不会立即将deleted内存报告为免费.