中易网

关于new命令中的内存释放

答案:3  悬赏:70  
解决时间 2021-02-18 00:39
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
最佳答案
其实你的这个函数并没有问题,如果这个函数无法申请到有效内存的话,估计是你在外部使用这个返回指针的时候忘记了释放,极端一点的情况是在外部调用这个函数的时候进入了死循环。
检查检查吧,只能是上面这个原因。
全部回答
有GetSpace,那就应该有个ReleaseSpace喽,参数的话就是GetSpace传出去的new后的指针呀(有点绕口)。 作为练习的话,你可以这样定义自己的内存分配。但是真的想包装个管分配内存的类的话,劝你放弃,内存分配的学问大了去了,会涉及你想都想不到的知识(由于是内存分配,因此必定会直接面对操作系统,知识不够,会出现分配效率和安全性等多方面的问题)。起码在你这个分配函数里,看不见try块。一般内存分配函数都有的一种形式!
释放是释放了,但是是否将这块内存清空对于不同的编译器有不同的实现 但是为了时间效率,多数编译器选择仅仅消除程序中new所跟踪管理的内存记录,而不抹去被释放那一块内存中的数据(任何操作都会有cpu开销)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
什么品牌的耳机好可以在淘宝买吗
男人会介意女朋友纹身吗
鑫盛装饰批发在什么地方啊,我要过去处理事情
cad2007封闭的图形三维拉伸后为实体,怎么操
胀焊结合的优缺点
大林木命和什么命最配
汽车离合器里减振器阻尼片作用大吗?
华莹宾馆地址在什么地方,想过去办事
停车场(施家南路)怎么去啊,有事要去办理
139元返现百分之5怎么算
第三方就业协议签了,但是没有去上班,会有什
有关英国贵族的电影
德都大街/通兴路(路口)这个地址在什么地方,
我的户口是烟台的现在淄博上班,之前公司交的
您感觉到了当前的经济萧条了吗?
推荐资讯
目前实况足球几最好玩
东芝Z30和Z40应该选哪个
英阳村在哪里啊,我有事要去这个地方
成都中医学院附属二院检验科周末上班吗?
济南高中数学课本是使用的什么版本
山东协昌电机有限公司地址在什么地方,想过去
求冒牌妻子 随波逐流 just go with it 电影下
下载优酷快车滴滴打
胃印戒细胞癌好治吗
今天的天气正适合散步翻译
未知除以20的商一定大于未知除以30的商对吗
不同的两个数的最小公倍数一定大于它们的最大
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?