是我对 指针理解错了么?

lantuling 2011-11-06 01:17:13
struct Node
{
int data;
Node *next;
};

Node *pr;
pr=new Node;

假如我 delete pr; 之后
if(pr!=NULL)
{

}

他竟然走大括号里的内容
即使我

if(pr->next!=NULL)
{

}


照样走。。。。
...全文
163 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lantuling 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 gotoit 的回复:]

编程习惯啊,不够严谨。
[/Quote]


yeah。。。这还不是 编程习惯的问题 是我对指针的理解不够扎实 谢谢各位了 理解~
zzcmx2008 2011-11-06
  • 打赏
  • 举报
回复
delete只是将pr指向的内存给释放掉,但是并没有将pr置为NULL,所以pr的值并不是NULL,所以进入你的if判断了,所以建议:
delete pr;
pr=NULL;
gotoit 2011-11-06
  • 打赏
  • 举报
回复
编程习惯啊,不够严谨。
btloveet 2011-11-06
  • 打赏
  • 举报
回复
楼上正解!
quwei197874 2011-11-06
  • 打赏
  • 举报
回复
delete pr
pr = NULL;
jixingzhong 2011-11-06
  • 打赏
  • 举报
回复
delete只是释放内存,但是没有改变指针的值。

所以,一般都建议:
delete pr;
pr=NULL;
lantuling 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]

Node *pr;
pr=new Node;

假如我 delete pr; 之后
if(pr!=NULL)
{

}

他竟然走大括号里的内容
、、、、、、、、当然走里面去了,你delete pr;后pr的值是不变的,只是释放他指向的地址的内存。
即使我

if(pr->next!=NULL) //pr所指的内容已经被释放,再去访问他……
[/Quote]

噢噢明白了 所以好的编程习惯是 一释放 就立即NULL了? 这C++学的 不扎实啊
lantuling 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 caddor 的回复:]

看到2楼,才懂楼主想问什么
[/Quote]

我的表达能力这么偨???
qyxqyxqyx 2011-11-06
  • 打赏
  • 举报
回复
走你~~~~
caddor 2011-11-06
  • 打赏
  • 举报
回复
看到2楼,才懂楼主想问什么
guoweid 2011-11-06
  • 打赏
  • 举报
回复
楼上说的有理。
传说中的野指针就是你这样造成的,delete pr;但是没有pr = null;自然pr就变成了野指针,再次使用的时候就会出问题。
jixiang1983 2011-11-06
  • 打赏
  • 举报
回复
delete pr后,pr成野指针,在pr上的任何查找赋值等操作都是没有意义的,应立即把pr的值设为空
iamnobody 2011-11-06
  • 打赏
  • 举报
回复
Node *pr;
pr=new Node;

假如我 delete pr; 之后
if(pr!=NULL)
{

}

他竟然走大括号里的内容
、、、、、、、、当然走里面去了,你delete pr;后pr的值是不变的,只是释放他指向的地址的内存。
即使我

if(pr->next!=NULL) //pr所指的内容已经被释放,再去访问他的内容(pr->next)是非法的行为。访问的是未知内存的值,所以可能不为0
{

}


照样走。。。。

64,637

社区成员

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

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