这个问题让我郁闷了2天

cppmfc 2009-05-23 08:09:49
#include<iostream.h>
int *p=new int;
*p=10;
int *pp=new int;
*pp=50;
*p=20;
cout<<"*pp="<<endl;
cout<<"*p="<<endl;
结果是
*p=20
*pp=20;

我对这个答案郁闷了2天, 请大家帮我解释下为什么都是同样的答案?
我测试了下, 二者的地址是相同的,莫非,p被释放后, 莫非p仍然阴魂不散的指向原本的空间地址?




...全文
246 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
huqinglu123 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hikaliv 的回复:]
cout < <"*pp=" < <endl;
cout < <"*p=" < <endl;

你这两行能显示什么出来????谁知道是不是你自己指定错了。
[/Quote]
顶李博的
我一开始就郁闷...
那有问题吗 输出不就是"*pp= *p= 嘛
字云逸 2009-05-25
  • 打赏
  • 举报
回复
看来从问题中又引申出别的问题了.
huayangcvj 2009-05-25
  • 打赏
  • 举报
回复
up
周成风 2009-05-25
  • 打赏
  • 举报
回复
我看半天也没发现错误,原来是运行没错。。
ysysbaobei 2009-05-25
  • 打赏
  • 举报
回复
Markerhao 2009-05-25
  • 打赏
  • 举报
回复
..............
介都是嘛啊
..............
lishaohua23 2009-05-25
  • 打赏
  • 举报
回复
学习了哈
msdn2009_2010 2009-05-25
  • 打赏
  • 举报
回复
运行正常,顶!
GoonYangXiaofang 2009-05-24
  • 打赏
  • 举报
回复

#include <iostream>

using namespace std;

int main()
{
int *p = new int;

*p = 10;

int *pp = new int;

*pp = 50;
*p = 10;

cout << "*pp = " << *pp << '\n';
cout << "*p = " << *p << '\n';

return 0;
}

输出:
*pp = 50
*p = 10
na2650945 2009-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
内存的特点是“存得进,取不完”,一段内存一旦被你存进去值以后,除非你改写他,他得值永远是那么多。
delete内存后,内存归还给系统,但是只要系统没有把那个free得内存给别人用,那块内存就永远是可以用得,且值也不会发生变化

所以不要期望你删除内存后你访问内存自动就出异常,不使用释放后得内存更多得是程序员得责任,达到你要的释放后访问立刻出错的代价是非常昂贵的
[/Quote]
学习啦。
VR_Lab 2009-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hikaliv 的回复:]
cout < <"*pp=" < <endl;
cout < <"*p=" < <endl;

你这两行能显示什么出来????谁知道是不是你自己指定错了。
[/Quote]
就是啊
Sou2012 2009-05-23
  • 打赏
  • 举报
回复
我晕。。。
milolinux 2009-05-23
  • 打赏
  • 举报
回复
呃~。。。。。。。。。。。
  • 打赏
  • 举报
回复


void main()
{
int *p=new int;
*p=10;
int *pp=new int;
*pp=50;
*p=20;
cout <<"*pp=" <<*pp<<endl;
cout <<"*p=" <<*p<<endl;

}


*pp=50
*p=20
Press any key to continue


这样是一切正常的
lingyin55 2009-05-23
  • 打赏
  • 举报
回复
两句输出的都是字符串。
另外即使是要输出*pp和*p的值,执行
delete pp; 之后,*pp的值还可能是原来的值,可以把pp=NULL;试试。

[Quote=引用 7 楼 cppmfc 的回复:]
#include <iostream.h>
int *p=new int;
*p=10;
int *pp=new int;
*pp=50;
*p=20;
delete pp;
cout < <"*pp=" < <endl;
cout < <"*p=" < <endl;
我用的是 VC6
[/Quote]
光宇广贞 2009-05-23
  • 打赏
  • 举报
回复
……
你输出的是字符串而已……
cppmfc 2009-05-23
  • 打赏
  • 举报
回复
#include <iostream.h>
int *p=new int;
*p=10;
int *pp=new int;
*pp=50;
*p=20;
cout < <"*pp="<<*pp< <endl;
cout < <"*p=" <<*p<<endl;
少了"<<*pp" ,和"<<*p",这么明显的错误大家也没有发现出来,呵呵
光宇广贞 2009-05-23
  • 打赏
  • 举报
回复
cout < <"*pp=" < <endl;
cout < <"*p=" < <endl;

你这两行打印的是字符串,和p和pp没有关系
cppmfc 2009-05-23
  • 打赏
  • 举报
回复
#include <iostream.h>
int *p=new int;
*p=10;
int *pp=new int;
*pp=50;
*p=20;
delete pp;
cout < <"*pp=" < <endl;
cout < <"*p=" < <endl;
我用的是 VC6
lingyin55 2009-05-23
  • 打赏
  • 举报
回复
cout < <"*pp=" < <endl;
cout < <"*p=" < <endl;

输出的是两个字符串啊。
加载更多回复(5)

65,210

社区成员

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

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