关于new命令中的内存释放
答案:3 悬赏:70
解决时间 2021-02-18 00:39
- 提问者网友:醉人眸
- 2021-02-17 09:02
float* fGrid::GetSpace(const int linesG)
{
float* outdata;
outdata=new float[linesG];
if(outdata==0) cout<<"cannot getspace for a vector."< return outdata;
// delete []outdata;
}
我在类里面做了这么一个函数,它用了多以后就申请不到内存了,因为要return的缘故不能delete,请教怎么解决这个问题
其实我是在调程序的时候某次循环调用这个函数的时候得不到空间了,并不确定是不是没有释放导致的。之前一次循环的时候这个函数还是可以用的,然后到了第二个循环再调用这个函数返回的指针就是0了
当时linesG是512
最佳答案
- 二级知识专家网友:如果这是命
- 2021-02-17 10:38
其实你的这个函数并没有问题,如果这个函数无法申请到有效内存的话,估计是你在外部使用这个返回指针的时候忘记了释放,极端一点的情况是在外部调用这个函数的时候进入了死循环。
检查检查吧,只能是上面这个原因。
全部回答
- 1楼网友:闲懒诗人
- 2021-02-17 12:14
有GetSpace,那就应该有个ReleaseSpace喽,参数的话就是GetSpace传出去的new后的指针呀(有点绕口)。
作为练习的话,你可以这样定义自己的内存分配。但是真的想包装个管分配内存的类的话,劝你放弃,内存分配的学问大了去了,会涉及你想都想不到的知识(由于是内存分配,因此必定会直接面对操作系统,知识不够,会出现分配效率和安全性等多方面的问题)。起码在你这个分配函数里,看不见try块。一般内存分配函数都有的一种形式!
- 2楼网友:不服输就别哭
- 2021-02-17 12:07
释放是释放了,但是是否将这块内存清空对于不同的编译器有不同的实现
但是为了时间效率,多数编译器选择仅仅消除程序中new所跟踪管理的内存记录,而不抹去被释放那一块内存中的数据(任何操作都会有cpu开销)
我要举报
大家都在看
推荐资讯