new,delete

botebote419 2010-11-20 07:35:10
int main()
{
int i = 10,j = 5;
int *ptr = new int(i);
delete ptr;
*ptr = j;
return 0;
}
请问下为什么delete后的ptr还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
...全文
76 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
botebote419 2010-11-20
  • 打赏
  • 举报
回复
回9楼,靠,真搞错了,多谢各位回答了
botebote419 2010-11-20
  • 打赏
  • 举报
回复
还有没有对我上面的问题能解答下的,谢谢啊
gules 2010-11-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 botebote419 的回复:]
回3楼,我在c++primer上看到的代码是
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
++rhs.ptr-> use;
if(ptr-> use==0)
delete ptr;
ptr = rhs.ptr;……
[/Quote]

呵呵,这是引用计数,你所说的问题何在?(计数为0时原内存释放,然后重新指向合法的新内存,与你所说的情况一样吗?你的是没改变指向,这里是指向另一个合法的地方,别搞混罗!)
botebote419 2010-11-20
  • 打赏
  • 举报
回复
回3楼,我在c++primer上看到的代码是
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
++rhs.ptr->use;
if(ptr->use==0)
delete ptr;
ptr = rhs.ptr;
val = rhs.val;
.
.
.
}
如果按3楼所说,这个代码不是有问题吗
luciferisnotsatan 2010-11-20
  • 打赏
  • 举报
回复
delete释放指针指向的内存,而delete之后,指针还是指向那个空间。但那个空间现在是干什么用的就不知道了,这样很危险。所以要把指针指向NULL
無_1024 2010-11-20
  • 打赏
  • 举报
回复
delete 释放的是指向的对象 而不是释放指针的 释放以后ptr是一个野指针 一般要将其置为空 也就是赋值为NULL 这样就是避免野指针的存在
ruben5288 2010-11-20
  • 打赏
  • 举报
回复
delete只是释放了之前指针的内存,而这个指针则还是存在,只不过后面这个赋值已经是占用了非法内存了!
qq120848369 2010-11-20
  • 打赏
  • 举报
回复
指针变量存的地址还是原来的地址,只是地址上的东西已经不是那个东西.
gules 2010-11-20
  • 打赏
  • 举报
回复
为什么delete后的ptr还能继续被赋值啊?
-----------------------------------
指针指向没有改变,当然能赋值(与正常使用是一样的),只不过赋值写入的内存不再是程序中合法的内存(这种行为将是未定义的,也就是说什么事情都可能发生,无法预测),应当避免!
失落的凡凡 2010-11-20
  • 打赏
  • 举报
回复
delete ptr是释放ptr这个指针指向那个对象,而ptr是个指针,是个自动变量,delete不会销毁指针本身。
Csuxiaowu 2010-11-20
  • 打赏
  • 举报
回复
delete 之后 最好 使其 = NULL

64,682

社区成员

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

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