初学c++,写了一个代码,出现堆破坏问题。。不懂。
#include <iostream>
#include <cstring>
using namespace std;
class String
{
public:
String(char*m);
String operator+(String s);
String & operator=(String s);
~String()
{delete []str;};
void print();
private:
char *str;
};
String::String(char*m)
{
str=new char[20];
strcpy_s(str,20,m);
}
String String::operator+(String s)
{
strcat_s(str,50,s.str);
return *this;
}
String & String::operator=(String s)
{
str=s.str;
return *this;
}
void String::print()
{
cout<<str<<endl;
}
int main()
{
char*a,*b;
a="Teacher",b="Student";
String s1(a),s2(b);
s1.print();
s2.print();
s1=s1+s2;
s1.print();
system ("pause");
}
求各位大大帮忙。。。。大大感谢了。。
[解决办法]
你的operator=这个函数中,应该复制字符串的内容,而不是复制指针本身
[解决办法]
str=new char[20];
String String::operator+(String s)
{
strcat_s(str,50,s.str);//str只有20个字节,这里不安全。将50改为20
return *this;
}
operator= 如楼上问题。