永发信息网

VC中new指针释放问题

答案:5  悬赏:60  手机版
解决时间 2021-02-15 21:22
  • 提问者网友:你给我的爱
  • 2021-02-15 10:53
VC中new指针释放问题
最佳答案
  • 五星知识达人网友:何以畏孤独
  • 2021-02-15 11:18
指针在程序中往往有很多细节问题,比如
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楼网友:青灯有味
  • 2021-02-15 14:23
delete fVoltage
  • 2楼网友:猎心人
  • 2021-02-15 13:29
在指针指向的变量使用完毕后delete就行了。
类中成员变量的话析构函数中删除
  • 3楼网友:愁杀梦里人
  • 2021-02-15 13:17
delete p就可以了啊。。
  • 4楼网友:街头电车
  • 2021-02-15 12:55
我觉得应该这样比较合适:
在另一个类中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; 操作完释放指针

你上面的那种也可以,并不是错的..我说的只是一种方法,算是一种经验..防止内存泄漏...为避免野指针
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯