我正在编写一个大型数值分析程序,我几乎不需要优化内存。
在我的程序中,有些地方我需要计算一个矩阵,然后在某些函数中使用它。我们称之为矩阵f
。f
是,一个在创建winSize x winSize
之前计算的变量。f
我有几个功能,这是重要的:
double** getF(some params to get f,int winSize){
double** f=new double*[winSize];
for(int i=0;i<winSize;i++)
f[i]=new double[winSize];
/*
Some stuff to fill f
*/
}
void freeF(double** f,int winSize){
for(int i=0;i<winSize;i++)
delete [] f[i];
delete [] f;
}
程序如下:
int winSize=computeWindowSize();
double** f=getF(someparams,winSize);
hiIamaFunctionThatWantsToReadF(params...,f,winSize);
soIwant(params2...,f,winSize);
iamJustCurious(f,winSize);
freeF(f,winSize)
请注意,没有人修改 f,只是读取它。
我的问题是这不会释放内存。我认为问题出在我处理 f 的方式上,但不确定....
我的问题是:
- 为什么这不起作用?
- 我应该怎么做才能让它工作?
编辑:
如何检查内存没有被释放?
我必须运行这段代码 1000x1400 次,并且在几次迭代中程序崩溃,因为我的计算机中没有更多可用的 RAM 内存......这可能是未释放内存的标志。然后我尝试在函数外创建内存,然后在函数外删除。通过这种方式,我可以看到内存被分配和删除。但是一旦在函数内部,我可以看到分配,但看不到释放。