24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 894  |  回复: 6

martialvv

铁虫 (初入文坛)

[求助] 请问下面这段c++小程序为什么不能运行已有2人参与

int a = 10; float b = 20;

int *p=new int(a);
cout<<"the pointer to a is "<<*p<<endl;
delete p;
float *p = new float(b);
cout<<"the pointer to b is "<<*p<<endl;
delete p;

我已经把指向a的指针p删掉了,为什么不能再用p来命名指向b的指针呢?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

Boncourage!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzy滴号

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
martialvv: 金币+15 2014-09-25 15:14:32
因为c++程序在编译时要建立一个符号表(可以认为是存储变量基本信息的表), 此时不会分析程序的运行情况, 只是单纯的按字符名字来处理. 所以你的代码中有两个p变量,但在符号表中只会存在一个与p相关的表项,编译器不能确定你到底要把p定义成什么变量,就报错了.
天道酬勤
2楼2014-09-24 22:18:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

martialvv

铁虫 (初入文坛)

引用回帖:
2楼: Originally posted by zzy滴号 at 2014-09-24 22:18:32
因为c++程序在编译时要建立一个符号表(可以认为是存储变量基本信息的表), 此时不会分析程序的运行情况, 只是单纯的按字符名字来处理. 所以你的代码中有两个p变量,但在符号表中只会存在一个与p相关的表项,编译器不能 ...

谢谢。那有没有方法从那个表里先把p删除,然后再用他定义别的变量?我是说比较简单易行的方法,比如只用一个运算符做这个事情。还是只能用不同的名字命名?
Boncourage!
3楼2014-09-25 02:08:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzy滴号

金虫 (小有名气)

引用回帖:
3楼: Originally posted by martialvv at 2014-09-25 02:08:30
谢谢。那有没有方法从那个表里先把p删除,然后再用他定义别的变量?我是说比较简单易行的方法,比如只用一个运算符做这个事情。还是只能用不同的名字命名?...

应该没办法,因为C++编译器是一个独立的软件,一般人更改不了,而这个表是编译器产生的。
天道酬勤
4楼2014-09-25 12:36:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (文坛精英)


感谢参与,应助指数 +1
ben_ladeng: 金币+1, 谢谢指教 2014-10-05 10:57:19
本帖仅楼主可见
5楼2014-09-25 14:44:30
已阅   申请程序强帖   回复此楼   编辑   查看我的主页

安靖

银虫 (正式写手)

变量在声明的时候需要明确给出类型,而p在声明的时候是int类型。即使在释放内存后,其类型并不会改变。所以你再去把p指向float的时候就会出问题
6楼2014-09-25 16:31:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

人走茶不凉

银虫 (职业作家)

这样也能编译过去?
7楼2014-12-03 11:04:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 martialvv 的主题更新
信息提示
请填处理意见