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? 展开
float *fVoltage;
fVoltage = new float[sizeof(float) * 16];
return fVoltage;
另一个类中调用者个GetData():
float *p;
p= m_Adsoft.GetData();
如何释放new的指针fVoltage? 展开
展开全部
指针在程序中往往有很多细节问题,比如
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)
更好。
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)
更好。
展开全部
我觉得应该这样比较合适:
在另一个类中new一个指针。。GetData传入这个指针,然后对这个指针操作,用完后再delete
有一个基本原则:new指针原则谁创建谁释放。。这样安全。。
像你上面这样。。实际上new指针已过函数生命周期。。。但却在内存中。。。很不安全。。
在另一个类中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; 操作完释放指针
你上面的那种也可以,并不是错的..我说的只是一种方法,算是一种经验..防止内存泄漏...为避免野指针
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在指针指向的变量使用完毕后delete就行了。
类中成员变量的话析构函数中删除
类中成员变量的话析构函数中删除
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete p就可以了啊。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete fVoltage
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询