VC中new指针释放问题

在一个函数GetData()中new了一个指针float*fVoltage;fVoltage=newfloat[sizeof(float)*16];returnfVolt... 在一个函数GetData()中new了一个指针
float *fVoltage;
fVoltage = new float[sizeof(float) * 16];
return fVoltage;
另一个类中调用者个GetData():
float *p;
p= m_Adsoft.GetData();
如何释放new的指针fVoltage?
展开
 我来答
百度网友5a51b92
推荐于2017-09-11 · TA获得超过2923个赞
知道答主
回答量:295
采纳率:78%
帮助的人:14.5万
展开全部
指针在程序中往往有很多细节问题,比如
1、指针作为返回值,某个分支中进行赋值返回,另一个分支却没有值。
2、指针作为函数参数传递,却在函数中释放了,函数体外该指针无效了。
3、在函数中修改一个指针,让其指向了另一块新的地址,则需要将原地址空间释放。
4、新声明一个指针是要初始化为NULL;对一块空间释放内存以后,要将指针设为NULL。
5、用一个指针为另一个指针赋值,此时两个指针指向同一块地址,释放任何一个指针,另一个指针则成为悬挂指针。
6、当需要使用相同数据内容的两块地址时,可申请两块地址空间,并用memcpy赋值,避免指针直接赋值。
7、变量作为函数参数却需要在函数体中修改其值时,避免使用指针,使用引用更好。如
int PreProcess(BYTE *image,int *nHeight,int *nWidth)改为
int PreProcess(BYTE *image,int &nHeight,int &nWidth)
更好。
昆仑机电
推荐于2017-09-30 · 超过32用户采纳过TA的回答
知道答主
回答量:109
采纳率:0%
帮助的人:94万
展开全部
我觉得应该这样比较合适:
在另一个类中new一个指针。。GetData传入这个指针,然后对这个指针操作,用完后再delete

有一个基本原则:new指针原则谁创建谁释放。。这样安全。。
像你上面这样。。实际上new指针已过函数生命周期。。。但却在内存中。。。很不安全。。
追问
您的意思是将另一个类中的float *p;改为用new创建的指针,之后释放 delete []p;
这样的话,其实p和 fVoltage 创建的内存都释放了,因为都指向同一片内存空间,但是由于fVoltage还存在,所以会引起安全因素。我的理解对嘛?
如果不用new的话,直接定义指针,这样在另一个类中接这个指针能取到这个指针指向的内存中的值吗?是否已经被释放了?
追答
float  *p=NULL;
P=new float[sizeof(float) * 16];
GetData(p) 在这个函数里对指针进行操作
delete p; 操作完释放指针

你上面的那种也可以,并不是错的..我说的只是一种方法,算是一种经验..防止内存泄漏...为避免野指针
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朋御天下
2011-10-16 · 超过58用户采纳过TA的回答
知道小有建树答主
回答量:176
采纳率:40%
帮助的人:93.1万
展开全部
在指针指向的变量使用完毕后delete就行了。
类中成员变量的话析构函数中删除
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhghlong
2011-10-16
知道答主
回答量:12
采纳率:0%
帮助的人:8.2万
展开全部
delete p就可以了啊。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
依赖dependence
2011-10-16 · 超过25用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:69.3万
展开全部
delete fVoltage
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式