一个比较弱的问题

RickeyLv 2002-03-14 11:06:52
char* szYear=new char;
itoa(4,szYear,10);
delete szYear; //出错???为什么???
...全文
33 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx_sanjin 2002-03-16
  • 打赏
  • 举报
回复
不清楚.lib中itoa是怎么写的~~~~

想法:
当你new过以后,系统将记录szYear指针的首地址和大小,而因为指针分配的不够大,itoa的内部执行中又强行的为szYear开辟了一个字节的空间,使szYear的大小发生了变化,所以delete就会出错了~~~只是想法~~~~有待证实啊~~~
RickeyLv 2002-03-16
  • 打赏
  • 举报
回复
那为什么在执行
itoa(4,szYear,10)是不出错,
而是在delete szYear是出错呢???
zx_sanjin 2002-03-16
  • 打赏
  • 举报
回复
请看msdn(itoa):

Remarks

The _itoa, _i64toa, and _ui64toa function convert the digits of the given value argument to a null-terminated character string and stores the result (up to 33 bytes) in string

也就是说,itoa参数中的字符串长至少应为1,它要在结尾处保存一个NULL
huoOliver 2002-03-16
  • 打赏
  • 举报
回复
一个更弱的问题:在这里如何提问题?
leizhengdeng 2002-03-15
  • 打赏
  • 举报
回复
char* szYear=new char;
这种写法没错,只是只开辟了一个大小为1的空间
而int型的大小可以是2^32= 4,294,967,296 (int 4bytes, 32bits)
所以需要十位的空间存放,加上最后的'\0',需要11位char
所以,准确的说new出来的空间要 >= 11
k_f 2002-03-15
  • 打赏
  • 举报
回复
你用VC++?我用dev-c++4.0编译运行没有错
同意leizhengdeng(阿登) 的意见,是数据类型长度不同造成的,int的长度比char大,所以char* szYear=new char;会导致运行时错误。
RickeyLv 2002-03-15
  • 打赏
  • 举报
回复
好像你们回答的都不对,我发现是错误是由itoa(4,szYear,10);引起的
我用的是vc,
经过测试

char* szYear=new char[1];或
char* szYear=new char;或
char* szYear=new char[10]时
去掉itoa(4,szYear,10)这条语句,
那么用delete或delte[]都不会出错。
但一旦使用了itoa(4,szYear,10)这条语句,那么就有可能出错,
有人知道是为什么吗?
lansenet 2002-03-15
  • 打赏
  • 举报
回复
是char长度不够,比int小~~~~~
cssnow 2002-03-15
  • 打赏
  • 举报
回复

char* szYear=new char;
因为new char = new char[1];

itoa(4,szYear,10);
delete szYear; //出错???为什么???

delete [] szYear;就没有问题了。
北极猩猩 2002-03-15
  • 打赏
  • 举报
回复
唉,来晚了。
不过提醒一句用new[]分配的内存一定要用delete[]来释放。
snipersu 2002-03-14
  • 打赏
  • 举报
回复
mei
RickeyLv 2002-03-14
  • 打赏
  • 举报
回复
char* szYear=new char;
这种写法错了吗??为什么???
leizhengdeng 2002-03-14
  • 打赏
  • 举报
回复
char* szYear=new char[12];
itoa(4,szYear,10);
delete []szYear;
RickeyLv 2002-03-14
  • 打赏
  • 举报
回复
是运行时出错

69,377

社区成员

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

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