晕 为什么程序不能正常结束?在线

NewKUN 2004-08-11 10:15:44
const char *cstr="old string";
char *str=(char *)new char ( strlen(cstr) );
memcpy(str , cstr ,strlen(cstr));
cout<<"before TestFun str="<<str <<endl;
//TestFun(str);
cout<<"in main str="<<str<<endl;
delete str;
return ret;
为什么?不解。。。
...全文
147 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
了解! 揭贴~~~
adoqq 2004-08-11
  • 打赏
  • 举报
回复
char *str=new char[strlen(cstr)+1]
还要有一句
str[strlen(cstr)+1]=0;
就没乱码了

请哪位回答我的问题。。。
什么时候用()什么时候用[]?

()创建一个指向某类型对象的指针,[]创建一个指向由某类型对象组成的一个数组的首地址的指针(真绕口)
例如:
int* a=new int(6); //创建了一个指向int对象的指针,这个int对象的值是6
int* a=new int[6]; //创建了一个指向int数组首地址的指针,这个数组有6个int类型的元素
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
统一处理有什么不对???
willko 2004-08-11
  • 打赏
  • 举报
回复
对于内部类型而言。
=========================
delete str;改为delete[] str;
-----------------------
对于内部类型delete str 和delete [] str;一样。
书上说的,不知对否。。
========================

看清
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
请哪位回答我的问题。。。
什么时候用()什么时候用[]?
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
楼上的兄弟 这个是不对的 你自己写个类就知道区别了哈~~~
willko 2004-08-11
  • 打赏
  • 举报
回复
当然不一样的。
呵呵,我只知道new[]/delete[] , new/delete
-----------------------
我知道不一样啊。我的意思是说他们的结果是一样的。
也就是说对于需要加[]不加 的结果也不会造成内存泄漏
但是我无法证实,所以不知道对否
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
什么时候是()?什么时候是[]?
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
为什么一定是 char *str=new char[strlen(cstr)+1]呢?
这个呢 ?比如: char *str=(char *)new char(MAX_LEN * sizeof (char))的吗?
Dong 2004-08-11
  • 打赏
  • 举报
回复
当然不一样的。
呵呵,我只知道new[]/delete[] , new/delete
ddc 2004-08-11
  • 打赏
  • 举报
回复
直接错误:char *str=(char *)new char [ strlen(cstr) ];改了能通过。
潜在错误:strlen()改成strlen()+1,或者用sizeof()
willko 2004-08-11
  • 打赏
  • 举报
回复
delete str;改为delete[] str;
-----------------------
对于内部类型delete str 和delete [] str;一样。
书上说的,不知对否。。
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
为什么一定是 char *str=new char[strlen(cstr)+1]呢?
这个呢 ?比如: char *str=(char *)new char(MAX_LEN * sizeof (char))的吗?
Dong 2004-08-11
  • 打赏
  • 举报
回复
乱码是因为你要这样
char *str=new char[strlen(cstr)+1];
memcpy(str , cstr ,strlen(cstr));
str[strlen(cstr)]='\0';//加这一句
Dong 2004-08-11
  • 打赏
  • 举报
回复
memcpy(str , cstr ,strlen(cstr));
改为strcpy(str,cstr);看看
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
但是改成 char *str=new char[strlen(cstr)+1];也不能正常结束!
-------------------------------------------------------------------------------
不好意思 上面的可以正常结束 但是字符串后有乱吗
willko 2004-08-11
  • 打赏
  • 举报
回复
memcpy是干什么的?
NewKUN 2004-08-11
  • 打赏
  • 举报
回复
改成char *str=new char[strlen(cstr)];可以 测试通过
但是改成 char *str=new char[strlen(cstr)+1];也不能正常结束!
adoqq 2004-08-11
  • 打赏
  • 举报
回复

char *str=(char *)new char ( strlen(cstr) );
该是这个吧
char *str=(char *)new char [strlen(cstr)];
Dong 2004-08-11
  • 打赏
  • 举报
回复
char *str=(char *)new char ( strlen(cstr) );
改为
char *str=new char[strlen(cstr)];//最好是char *str=new char[strlen(cstr)+1];

delete str;改为delete[] str;

64,637

社区成员

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

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