c++ primer里面的一个小问题。

Generics 2007-04-10 11:16:05
这个小程序来自c++ primer 第四版的电子版第四章,其中计算字符串长度的时候有一个bug,所以拷贝的时候,目标字符串长度不够。我的问题是strcpy()的错误,为什么会导致delete出错,从而导致整个程序的崩溃呢?

#include <cstring>
//#include <string>

//using std::string;

void main()
{

const char *pc = "a very long literal string";
const size_t len = strlen(pc+1);
char *pc2 = new char[len + 1];
strcpy(pc2, pc);
if (strcmp(pc2, pc))
; // do nothing
delete [] pc2;

/*
string str("a very long literal string");
string str2 = str;
if (str != str2)
; // do nothing
*/
}
...全文
190 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlbdan 2007-04-11
  • 打赏
  • 举报
回复
strcpy并不判断是否有非法的内存被占用,

所以当用它导致了占用非法内存时不会出问题.

而在释放内存时,

系统会发现有的地方的内存不能释放,

因为它不是被new出来的,

而是系统自已的保护的内存,

所以这时要报内存使用错误
不想低调 2007-04-10
  • 打赏
  • 举报
回复
lz上面的程序会崩溃的吗?
不想低调 2007-04-10
  • 打赏
  • 举报
回复
mark

65,213

社区成员

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

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