为什么会有下面的结果?

lxchxch 2002-09-09 12:58:46
有个小程序,代码如下
int main()
{
int *pi = new int(50);
cout<<*pi<<endl;
if ( pi != NULL)
{
delete pi;
}
*pi = 10;
cout<<*pi<<endl;
return 0;
}
在delete pi后,我没有为其设置为NULL,然后重新为其赋值,可程序仍能正确运行,且结果正确,不知为什么。请高手指教.
...全文
20 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
eastsun 2002-09-09
  • 打赏
  • 举报
回复
这就是所谓垃圾错误。因为实际有的时候是到垃圾里面去读数据。如果垃圾还没有清空,不出错,否则出错。毫无规律可言。因为清垃圾是系统的事情,你是无法在本身的应用程序中得知的。所以,这种错误在小程序中比较容易发现。在一个代码量惊人的软件中是调试者最大的麻烦。因为这种错误并非每次都出现,也并非每次都不出现。
尽量少写这种太高深的代码。
eastsun 2002-09-09
  • 打赏
  • 举报
回复
这就是所谓垃圾错误。因为实际有的时候是到垃圾里面去读数据。如果垃圾还没有清空,不出错,否则出错。毫无规律可言。因为清垃圾是系统的事情,你是无法在本身的应用程序中得知的。所以,这种错误在小程序中比较容易发现。在一个代码量惊人的软件中是调试者最大的麻烦。因为这种错误并非每次都出现,也并非每次都不出现。
尽量少写这种太高深的代码。
cwanter 2002-09-09
  • 打赏
  • 举报
回复
笔误,NNULL应为NULL
stidio_zhougang 2002-09-09
  • 打赏
  • 举报
回复
虽然pi所指向的内存地址不再是原来分配的地址,但现在它可以随便指向一个地址,不行你可以这样试试:cout<<pi;于是它还是可以在该地址进行写和读,所以会出现你的那种情况。
cwanter 2002-09-09
  • 打赏
  • 举报
回复
因为pi指向的内存在删除后没有被使用,所以会出现这种问题。为了安全起见,应添加语句:pi=NNULL;,否则肯定会在以后出问题。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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