new分配的字符串中包含有0,最后该如何回收~~

wormszm 2007-05-07 03:56:55
举个例子来说下
char str[]="this is test!!";
buf = new char[255];
memset(buf,0,strlen(buf));
strcpy(buf,str);
delete[] buf; //这里回收就会出问题

请问这样的问题如何解决
...全文
214 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2007-05-07
  • 打赏
  • 举报
回复
没看出你举的例子有什么错,就算有错误也不是被delete的字符串有0的问题。

另一方面,既然你用new,说明你用的是C++;既然你用C++,直接用std::string就完了,动态分配干什么?


缓冲区溢出的就是你这种情况,以为自己申请了“比可能遇到的最长字符串还长的数组”。
expter 2007-05-07
  • 打赏
  • 举报
回复
strlen(buf)!=255 哦

  • 打赏
  • 举报
回复
很明显这里错误
memset(buf,0,strlen(buf));
可能存在越界,所以delete的时候出错
0皮皮0 2007-05-07
  • 打赏
  • 举报
回复
char str[]="this is test!!";
buf = new char[255];
memset(buf,0,255);
strcpy(buf,str);
delete[] buf;

这里的strlen(buf);有可能不等于255;
lei001 2007-05-07
  • 打赏
  • 举报
回复
char *buf = NULL;
char str[]="this is test!!";
buf = new char[255];
memset(buf,0,strlen(str));
strcpy(buf,str);
delete[] buf;

这样试试,看有没有问题?我认为问题和设置为0,没有关系,而是strlen(buf)计算的结果是不可知的,很有可能出现越界操作了
rtdb 2007-05-07
  • 打赏
  • 举报
回复

delete[] buf; //这里没有问题,回收时与内容无关。


不过这句有点问题:
memset(buf,0,strlen(buf));
-> memset(buf,0,255);
believefym 2007-05-07
  • 打赏
  • 举报
回复
char *buf = new char[255];
这块内存内容随机的,strlen(buf)是直到遇到0,所以很有可能会溢出,也就是超过255,delete的时候就出错了
believefym 2007-05-07
  • 打赏
  • 举报
回复
char *buf = new char[255];
memset(buf,0,255);

65,213

社区成员

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

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