C++中在用new分配的类使用cout方法输出类对象出现终止程序的问题(跪求答案)

类中用operator<<()方法在输出有new动态分配的类时就造成程序的终止运行问题?//头文件#ifndefCOW_H_#defineCOW_H_#include<i... 类中用operator<<( )方法在输出有new动态分配的类时就造成程序的终止运行问题?
//头文件
#ifndef COW_H_
#define COW_H_
#include<iostream>
using std::ostream;
using std::istream;

class Cow
{
char name[20];
char * hobby;
double weight;
int len;
public:
Cow();
Cow(const char * nm,const char * ho,double wt);
Cow(const Cow & c);
~Cow();
Cow & operator=(const Cow & c);
//Cow & operator=(const char * c);
void ShowCow()const;
friend ostream & operator<<(ostream & os,const Cow t);
};

#endif

//源文件
#include<iostream>
#include"cow.h"

Cow::Cow()
{
hobby=new char[1];
hobby[0]='\0';

strcpy(name,"no name");
weight=0;

}
Cow::Cow(const char * nm,const char * ho,double wt)
{
strncpy(name,nm,20);
name[20]='\0';
len=strlen(ho);
hobby=new char[len+1];
strcpy(hobby,ho);
weight=wt;
}

Cow::Cow(const Cow & c)
{
strcpy(name,c.name);
len=c.len;
hobby=new char[len+1];
strcpy(hobby,c.hobby);
weight=c.weight;
}
Cow::~Cow()
{
delete [] hobby;
}
Cow & Cow::operator=(const Cow & c)
{
if(this==&c)
return *this;
delete [] hobby;
len=c.len;
hobby=new char[len+1];
strcpy(name,c.name);
strcpy(hobby,c.hobby);
weight=c.weight;
return *this;
}

void Cow::ShowCow()const
{
using std::cout;
using std::endl;
cout<<"Name is: "<<name<<" ,hobby is: "<<hobby<<" ,weight is: "<<weight<<endl;
}

ostream & operator<<(ostream & os,const Cow t)
{
using std::cout;
using std::endl;
cout<<"Name is: "<<t.name<<" ,hobby is: "<<t.hobby<<" ,weight is: "<<t.weight<<endl;
return os;
}

//mian()
#include<iostream>
#include"cow.h"

int main()
{
using std::cout;
Cow nu1("xiaoxiaoqiang","baoyuan",50);
Cow nu2;
Cow temp;
// nu1.ShowCow();
cout<<nu1;
// nu2.ShowCow();
cout<<nu2;
nu2=nu1;
// nu2.ShowCow();
cout<<nu2;
return 0;
}

我的问题是为什么用cout<<nu1输出会造成程序的终止,我的深度复制构造函数和析构函数都写了啊,如果我把main()改成用ShowCow输出则没有问题,请问这个是怎么回事啊,我做了好几道关于new动态分配类中字符串的题都遇到了这个问题,我很想知道到底是什么问题,大侠们帮帮我啊~!
#include<iostream>
#include"cow.h"

int main()
{
using std::cout;
Cow nu1("xiaoxiaoqiang","baoyuan",50);
Cow nu2;
Cow temp;
nu1.ShowCow();
// cout<<nu1;
nu2.ShowCow();
// cout<<nu2;
nu2=nu1;
nu2.ShowCow();
// cout<<nu2;
return 0;
}

下面是我用VC6.0创好了的工程,大家直接点击121Cow.dsw运行看看帮我找找问题,感激不尽啊~
http://bbs.bccn.net/viewthread.php?tid=227879&page=1&extra=page%3D1#pid1352721
展开
 我来答
totozii
2008-08-12 · TA获得超过145个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:0
展开全部
Cow::Cow()
{
hobby=new char[1];
hobby[0]='\0';
//这里没有设置len
len = 0;

strcpy(name,"no name");
weight=0;
}

导致ostream & operator<<(ostream & os,const Cow t) 时拷贝构造函数
new char[len+1]; 大小不正确
潇洒人生best
2008-08-13
知道答主
回答量:27
采纳率:0%
帮助的人:0
展开全部
你那delete语句的位置应该在new后面,否则你的变量hobby申请的内存没有还回去,所以就会弹出一个内存错误的对话框。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式