复制构造函数上的程序崩溃

Program crash on copy constructor

我正在测试以下代码:

 #include<bits/stdc++.h>
 using namespace std;
 class Stringtype{
     char* str;
     int length;
     public:
     Stringtype(){
         str='[=10=]';
         length=0;
     }
     Stringtype(const Stringtype& s){
         cout<<"Constructor"<<endl;
         strcpy(this->str, s.str);
         this->length = s.length;
     }

     Stringtype(char* text){
         strcpy(this->str, text);
         this->length = strlen(str);
     }
     friend ostream& operator<<(ostream& stream, Stringtype s){
         stream<<"Value :"<<endl;
         for(int i=0;i<s.length;i++){
              cout<<(s.str)[i];
         }
         cout<<endl;
         stream<<"Length :"<<endl;
         stream<<s.length<<endl;
         return stream;
     }
    friend istream& operator>>(istream& stream, Stringtype& s){
         cout<<"Enter the string"<<endl<<endl;
         s.str = new char[30];
         cin>>s.str;
         s.length = strlen(s.str);
         return stream;
     }
 };

 int main(){
     Stringtype s1, s2;
     cin>>s1>>s2;
     cout<<s1<<s2;
     cout<<(s1>s2)<<endl;
     cout<<(s1<s2)<<endl;
     cout<<(s1==s2)<<endl;
     cout<<(s1+s2)<<endl;
     return 0;
 }

此代码产生以下输出(正确输入后):

构造函数

然后崩溃。

我似乎不明白为什么...

非常感谢任何帮助。谢谢。

您实际上从未为字符串的内部内存表示保留内存。你需要在某处new 。否则你将写入你不拥有的内存,这正是这里发生的事情,就在你观察到的输出之后的下一行。


对了:这里不能抄袭,你的签名

friend ostream& operator<<(ostream& stream, Stringtype s){

应阅读:

friend ostream& operator<<(ostream& stream, const Stringtype& s){

虽然您在内存处理方面存在错误,但这并没有改变这一事实。

请更改以下内容 朋友 ostream& operator<<(ostream& stream, Stringtype s) 到 朋友 ostream& operator<<(ostream& stream, Stringtype& s)

取字符串s的引用

尝试初始化 str="",而不是 str='\0';