关于new的一个小程序,新人请高手请教,我不懂!!

fly_6189 2007-11-09 07:05:54
int main()
{
char *p=new char;
cin>>p;
cout<<p<<endl;
delete p;

return 0;
}
我输入a时回显个a 但为什么系统报错了说:
DAMAGE:after Normal block (#47) at ox002b06c8
是怎么回事呀 望高手指点!!!!
...全文
210 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_6189 2007-11-11
  • 打赏
  • 举报
回复
谢谢 各位了
我好像明白了些,虽然还不太很清楚!!!
太感谢各位了 ,分少人多,只能每人一分!!抱歉,抱歉!!
CedarDiao 2007-11-10
  • 打赏
  • 举报
回复
这个程序2楼是正解

本来p的值是一个地址,这个地址是通过new char合法申请到的。
但是cin> > p就表示你使用输入的值将这个地址修改了。
输出时cout < <p 实际上也是输出的这个地址值(刚才被修改的),所以才会回显

问题出在delete p,
已开始p所代表的地址是你用new char合法申请到的,
但后来你通过输入修改了这个地址,
那鬼知道你这个地址合不合法,
不该释放的内存你去释放当然会出错了。
铖邑 2007-11-10
  • 打赏
  • 举报
回复
楼猪:char *p=new char;只分配一个字节!

应该是:
char *p=new char[256];
diegelove 2007-11-10
  • 打赏
  • 举报
回复
你用char *p=new char;给指针p分配了一块堆空间,又用cin>>p赋值,p指向的是地址,这样随便给一个指针一个地址是不允许的,虽然你的程序能运行,但是很可能一会就会出错。
fly_6189 2007-11-10
  • 打赏
  • 举报
回复
首先我先谢谢各位的帮忙,让我学到很多的东西.
我也上跑了个没有
delete p;
就没错了,看来就是它的错,
可我发现cin> > p并没有改变 p的初始地址!!

#include <stdio.h >
#include<iostream.h>
int main()
{
char *p=new char;
printf("%ox\n",p);
cin>>p;
printf("%ox\n",p);
cout<<p<<endl;
// delete p;

return 0;
}

结果是:
6404120X
a
6404120x
a
:;
也就是说cin> > p并没有改变 p的初始地址!!
还是原来的那个 地址!!!
为什么????
小弟很笨的 ,望高人请教!!!!
铖邑 2007-11-09
  • 打赏
  • 举报
回复
char *p=new char[256];
空杯归零 2007-11-09
  • 打赏
  • 举报
回复
这个P 本来应该存的是指针 结果存成了数值 输出可以 但释放就会出错
空杯归零 2007-11-09
  • 打赏
  • 举报
回复
我觉得
程序错在  delete p; 这一步

因为 p的值 等于97 就是'a'
所在在 delete p时 就是释放 97所指向的内存 报错.
kbh1984 2007-11-09
  • 打赏
  • 举报
回复
cin>>p;//输入的是指针指向的地址;
cout<<p;这里不会出错
但delete p;是把你手工付给p的地址空间收回就会出错了
此时收回的已不是开始在堆上分配的内存空间了
fly_6189 2007-11-09
  • 打赏
  • 举报
回复
不好意思我没表达清楚
我也知道因该
cin>>*p;
cout<<*p<<endl;
但我想知道我
cin>>p;
cout<<p<<endl;
当我输入a时已经回显个a但为什么系统报错??
3楼的大哥说的我有点明白了,好像就是与指针有关,但我还不是很清楚,
不好意思 希望3楼的大哥在说的清楚点!!
我记得 string p="asf";后面也没'\0 '呀
cout<<p;也可以吧
lylywenwen 2007-11-09
  • 打赏
  • 举报
回复
由于p是字符串的指针

你输入时的形式是字符串指针的形式
那么你再输出时那里会有字符串最后的那个'\0'呢?
那么它不就是出错了吗?
quentinliu 2007-11-09
  • 打赏
  • 举报
回复
楼上正解
铖邑 2007-11-09
  • 打赏
  • 举报
回复
cin >> *p;
cout << *p << endl;

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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