初学c++,写了一个代码,出现堆破坏问题。。不懂。

Ymikado 2013-03-17 06:59:25
#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");
}

求各位大大帮忙。。。。大大感谢了。。
...全文
149 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ymikado 2013-03-17
  • 打赏
  • 举报
回复
引用 3 楼 dataxdata 的回复:
你的operator=这个函数中,应该复制字符串的内容,而不是复制指针本身
谢谢这位大大,这个我改了。
Ymikado 2013-03-17
  • 打赏
  • 举报
回复
引用 4 楼 PPower 的回复:
str=new char[20]; String String::operator+(String s) { strcat_s(str,50,s.str);//str只有20个字节,这里不安全。将50改为20 return *this; } operator= 如楼上问题。
哦哦!!谢谢!!
Ymikado 2013-03-17
  • 打赏
  • 举报
回复
引用 3 楼 dataxdata 的回复:
你的operator=这个函数中,应该复制字符串的内容,而不是复制指针本身
改了之后也还是不行。。。哎,,还是堆破坏的这个问题,,
勉励前行 2013-03-17
  • 打赏
  • 举报
回复
str=new char[20]; String String::operator+(String s) { strcat_s(str,50,s.str);//str只有20个字节,这里不安全。将50改为20 return *this; } operator= 如楼上问题。
dataxdata 2013-03-17
  • 打赏
  • 举报
回复
你的operator=这个函数中,应该复制字符串的内容,而不是复制指针本身
Ymikado 2013-03-17
  • 打赏
  • 举报
回复
引用 1 楼 dataxdata 的回复:
是不是是在程序退出时出的错误?
退出?它是在运行一半的时候,中断,然后说这个程序的堆被破坏这样子的。
dataxdata 2013-03-17
  • 打赏
  • 举报
回复
是不是是在程序退出时出的错误?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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