请问个内存问题,谢谢!

xlbdan 2006-12-17 05:21:36
#define N 6 //为什么这里的N,当他是小于6的时候,在
//delete那里就要有内存错误?把delete
char *Fun() //去掉之后又完全正常?而当N大于等于6的
{ //时候delete,不会有任何问题?
char *x=new char[N];
strcpy(x,"hello"); //想问一下delete函数是清空的多少内存?
return x; //是不是new出来多少,就清空多少?
} //另外new出来的空间小于6,为什么字符串
void main() //也可以被strcpy成功?而只是在delete
{ //时出现错误呢?谢谢大家!
char *p=Fun();
cout<<p<<endl;
delete []p;
}
在strcpy的时候,只要我new的空间不是0,在不调用delete的时候是好用的,就是说还是可以把hello拷进去的,也可以正确的输出;但如果想调用delete,那我在new的时候就必须得大于等于字符串的长度才行,否则内存出错。
...全文
210 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlbdan 2006-12-18
  • 打赏
  • 举报
回复
嗯,多谢,cwl_feng的解释的很有道理!!
liangxing110 2006-12-17
  • 打赏
  • 举报
回复
感谢cwl_feng!!
我觉得有道理!!
liangxing110 2006-12-17
  • 打赏
  • 举报
回复
我也有跟楼主同样的问题
感觉前面的回答没有回答到点着上
期待得到指导!
cwl_feng 2006-12-17
  • 打赏
  • 举报
回复
因为当你delete时,delete释放完4个空间后,没有发现'\0'(终止标志位),知道你又越界到了其他的空间,从而知道你滥用了2个空间而自己有不能释放,故运行报错。这种报错完全出于资源考虑。
xlbdan 2006-12-17
  • 打赏
  • 举报
回复
谢谢各位,但我还是有地方不明白.

我开了小于6个的空间,假如说是4个,strcpy不检查边界,就把等于6个字节的"hello"拷进来了,只是占用了其它有用的2个内存单元,这个我明白了.
我不明白的是,为什么我不调用delete[]就没事,而调用它就有事.大家都说delete[]是释放new出来的字节数,也就是应该delete[]掉4个字节,那不应该有错啊.虽然有两个有用字节被我占用了,但我不调用delete[]的情况下也是占用的啊,那时怎么就没有问题呢?

小弟愚笨啊,请大家多多指教!多谢!
凌殿Y_ST 2006-12-17
  • 打赏
  • 举报
回复
string "hello" stored in memory will taken 6 byte-spaces, the last char is '\0',as ended character for string.
ongzi 2006-12-17
  • 打赏
  • 举报
回复
//为什么这里的N,当他是小于6的时候,在delete那里就要有内存错误?

因为"hello"其实是"hello\0"要6个字节的存储空间

//想问一下delete函数是清空的多少内存?是不是new出来多少,就清空多少?

new多少空间 delete []p就删多少空间

//也可以被strcpy成功?而只是在delete时出现错误呢?

strcpy是不做越界检查的.
cmail 2006-12-17
  • 打赏
  • 举报
回复
如果你分配小于6,那么字符串尾部就写在别的地方去了。而这个“别的地方”很有可能是内部维护信息的地方。你把它改写了,delete就没得依据了。所以出错。
ma100 2006-12-17
  • 打赏
  • 举报
回复
strcpy 并不管你数组是否越界,于是将这个错误带到了后边

解决方法:用strcpy_s代替strcpy
cmail 2006-12-17
  • 打赏
  • 举报
回复
“hello”这个串要6个才装得下啊。

64,654

社区成员

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

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