gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:38:34 25 4
gpt4 key购买 nike

我正在测试以下代码:

 #include<bits/stdc++.h>
using namespace std;
class Stringtype{
char* str;
int length;
public:
Stringtype(){
str='\0';
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;
}

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

构造器

然后崩溃。

我似乎无法理解为什么...

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

最佳答案

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


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

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

应阅读:

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

但不会改变您在内存处理中出现错误的事实。

关于c++ - 复制构造函数上的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com