一个释放内存的问题

hejialin666 2008-11-12 04:44:07
char* p;
void Fun(char* *temp);
{

*temp=(char *)malloc(size)
}
Fun(&p)
delete p;
p=NULL;//请问这里能释放在Fun函数里分配的空间吗?
两个指针指向同一空间怎么释放?
会出现内存泄露现象吗?
...全文
249 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sgfy168 2008-11-12
  • 打赏
  • 举报
回复
可以。释放。只要指向内存的地址是正确的就可以释放。

如果2个指针指向一个空间,只要释放一个指针就可以了。另一个不要管,否则就出错了。
xxgamexx 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hejialin666 的回复:]
引用 3 楼 BaihowFF 的回复:
程序没问题...可以释放...
两个指针如果指向一个..delete释放一次..另外一个直接设置成NULL就可以了...delete两次就挂了...

另外一个怎么设置成NULL???
[/Quote]


1,char **temp 是局部变量,他不需要再NULL了,因为你 delete p;p=NULL;了,所以*temp=NULL,你可以去了解下指针的指针概念
2,实际上是 &**temp的地址是函数栈的地址了。

个人觉得你这样做无伤大雅!
wangw8507 2008-11-12
  • 打赏
  • 举报
回复
temp时临时的,函数结束它也就不存在了,这是函数参数传递问题。函数结束以后,只能依靠P来释放已分配的内存,temp你是调用不到啦!没想想为什么要用二级指针?
Lnnu_lc 2008-11-12
  • 打赏
  • 举报
回复
我要补充一点:如果delete的指针指向NULL,那么delete多少次都是不会出错的
Lnnu_lc 2008-11-12
  • 打赏
  • 举报
回复
我要补充一点:如果delete的指针指向NULL,那么delete多少次都是不会出错的
BaihowFF 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hejialin666 的回复:]
引用 3 楼 BaihowFF 的回复:
程序没问题...可以释放...
两个指针如果指向一个..delete释放一次..另外一个直接设置成NULL就可以了...delete两次就挂了...

另外一个怎么设置成NULL???
[/Quote]
我估计是你没弄清楚指针...
看下面例子...
int *p1=new int;	// 为p1分配一个int空间
int *p2=p1; // p2指向p1空间
delete p1; // 也可以是p2 因为是指向一个地方,这样就将p1所指内容删除了
p1=NULL; // 将p1设为哪都不指
p2=NULL; // 将p2设为哪都不指
// 其实如果不设置NULL 程序也会正常结束...但是如果后面有代码就危险了
// 那时候p1和p2就成常说的野指针了
muyingchi 2008-11-12
  • 打赏
  • 举报
回复
哎,还有人这么用,虽然不会错,但是真的不好啊。malloc--delete,这用法居然还不少人用,不知道为什么,要是觉得默认的慢,就重载呗,干嘛要用malloc。看着就不爽
cyj626 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyu637 的回复:]
可以。释放。只要指向内存的地址是正确的就可以释放。

如果2个指针指向一个空间,只要释放一个指针就可以了。另一个不要管,否则就出错了。
[/Quote]up
xiansheng00 2008-11-12
  • 打赏
  • 举报
回复
最好不要这样用,要做到谁分配谁释放
once_and_again 2008-11-12
  • 打赏
  • 举报
回复
char* p; 没有分配空间
mingguang7213 2008-11-12
  • 打赏
  • 举报
回复
其实在这操作的还是函数外边的指针
p的地址就是*temp的值
所以*temp=(char *)malloc(size)
等价于p = (char *)malloc(size)
mzlogin 2008-11-12
  • 打赏
  • 举报
回复
反正不能delete两次,
delete一个以后另外一个指针就指向了一个不存在对象,
这时把它置为0
hejialin666 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lzr4304061988012 的回复:]
引用 5 楼 hejialin666 的回复:
引用 3 楼 BaihowFF 的回复:
程序没问题...可以释放...
两个指针如果指向一个..delete释放一次..另外一个直接设置成NULL就可以了...delete两次就挂了...

另外一个怎么设置成NULL???

p=NULL;
[/Quote]
那你释放的和设置成NULL的不是同一个指针么?都是外面的这个。怎么是另外一个?
里面的那个不用也不能释放吧?
xq830210 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hejialin666 的回复:]
引用 3 楼 BaihowFF 的回复:
程序没问题...可以释放...
两个指针如果指向一个..delete释放一次..另外一个直接设置成NULL就可以了...delete两次就挂了...

另外一个怎么设置成NULL???
[/Quote]
xxx = NULL;
Longinc 2008-11-12
  • 打赏
  • 举报
回复
清除一次。
lzr4304061988012 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hejialin666 的回复:]
引用 3 楼 BaihowFF 的回复:
程序没问题...可以释放...
两个指针如果指向一个..delete释放一次..另外一个直接设置成NULL就可以了...delete两次就挂了...

另外一个怎么设置成NULL???
[/Quote]
p=NULL;
xhs_lh04 2008-11-12
  • 打赏
  • 举报
回复
没问题,好的习惯在释放指针之后一定要置为NULL,这样在下次使用的时候只需判断一下是否为NULL就可,就避免释放了又使用的问题
longlongflower 2008-11-12
  • 打赏
  • 举报
回复
应该可以 因为它占得同一个内存空间 不过如果你释放Fun函数里的那个指针的空间 就不可以
longlongflower 2008-11-12
  • 打赏
  • 举报
回复
应该可以 因为它占得同一个内存空间 不过如果你释放Fun函数里的那个指针的空间 就不可以
hejialin666 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 BaihowFF 的回复:]
程序没问题...可以释放...
两个指针如果指向一个..delete释放一次..另外一个直接设置成NULL就可以了...delete两次就挂了...
[/Quote]
另外一个怎么设置成NULL???
加载更多回复(4)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧