C++程序在运行结束前出错,求大神解决,不胜感激

congjunlai 2014-05-11 04:28:08
有一程序如下,该程序在运行结束前出错,试分析出错原因,并补充程序解决出错问题。
#include <iostream.h>
#include <string.h>
class String {
char * text;
public:
String( char * str );
~String();
void printStr(){cout<<text<<endl;}
};
String::String( char * str ) {
cout<<"enter 'String::String', str=>"<<str<<endl;
text = new char[strlen(str)+1];
strcpy( text, str );
}
String::~String() {
cout<<"enter 'String::~String', text=>"<<text<<endl;
delete[]text;
}

void main() {
String str1("abcdef12345");
String str2(str1);
str1.printStr();
str2.printStr();
cout<<"ending main!"<<endl;
}
...全文
155 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-05-12
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
shenchenman 2014-05-11
  • 打赏
  • 举报
回复
1 运行这句String str2(str1); 时意味着编译器寻找拷贝构造函数,发现只能用默认的,也就是浅拷贝 2 浅拷贝意味着你的拷贝过程是假的,实际str2就是str1的引用,调试可以看到str1和str2地址是同一个地址 3 在程序退出前,str1和str2都需要析构,实际上就是同一个地址的内容析构了2次,第一次ok,第二次就是delete一个野指针 4 这个问题换一个问法,就是一道中兴经典面试题:一个指针连续delete2次会出现什么情况
ri_aje 2014-05-11
  • 打赏
  • 举报
回复
就是没写复制构造函数呗。
孤独的垂钓者 2014-05-11
  • 打赏
  • 举报
回复
给你分析一下: 运行代码的结果Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 上百度查下就知道,应该是内存读写问题 再看代码 String str2(str1); String 是你自己定义,而不是系统定义的, 但是只定义了 String::String( char * str ) 并没有 String::String( String str ) 猜测是C++编译时VC帮你补充了String::String( String str ) VC帮你补充的String::String( String str )大概意思 String::String( String str ) { text = str.text; //str所有类中的变量给该类中的变量赋值; } 简单说就是你的str1.text , str2.text 指向同一个地址 这个问题很多人都会忽视 解决也很简单 String::String( String str ) { text = new char [ strlen ( str.text ) ] ; strcpy( text , str.text ); }
Pump天天学习 2014-05-11
  • 打赏
  • 举报
回复
考试题? String类没有拷贝构造,所以执行的是浅拷贝 在main函数退出时,str1和str2都要析构 str1析构没有问题 str2析构函数中执行delete[] text时,text已经是str1的析构函数delete过的了

65,208

社区成员

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

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