关于new命令中的内存释放

来源:百度知道 编辑:UC知道 时间:2024/05/12 13:52:57
float* fGrid::GetSpace(const int linesG)
{
float* outdata;
outdata=new float[linesG];
if(outdata==0) cout<<"cannot getspace for a vector."<<endl;
return outdata;
// delete []outdata;
}

我在类里面做了这么一个函数,它用了多以后就申请不到内存了,因为要return的缘故不能delete,请教怎么解决这个问题
其实我是在调程序的时候某次循环调用这个函数的时候得不到空间了,并不确定是不是没有释放导致的。之前一次循环的时候这个函数还是可以用的,然后到了第二个循环再调用这个函数返回的指针就是0了

当时linesG是512

其实你的这个函数并没有问题,如果这个函数无法申请到有效内存的话,估计是你在外部使用这个返回指针的时候忘记了释放,极端一点的情况是在外部调用这个函数的时候进入了死循环。
检查检查吧,只能是上面这个原因。

函数这样改:
float* fGrid::GetSpace(float* outdata,const int linesG)
{
if(outdata==0) cout<<"cannot getspace for a vector."<<endl;
return outdata;
}
要用户来new,传入指针和长度,你来处理。

或者你在析构函数里delete

你当时linesG值为多少。

===========================================
那是蛮奇怪的,申请的内存也不大啊。
你把整个代码贴出来吧。

有GetSpace,那就应该有个ReleaseSpace喽,参数的话就是GetSpace传出去的new后的指针呀(有点绕口)。
作为练习的话,你可以这样定义自己的内存分配。但是真的想包装个管分配内存的类的话,劝你放弃,内存分配的学问大了去了,会涉及你想都想不到的知识(由于是内存分配,因此必定会直接面对操作系统,知识不够,会出现分配效率和安全性等多方面的问题)。起码在你这个分配函数里,看不见try块。一般内存分配函数都有的一种形式!