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

来源:百度知道 编辑:UC知道 时间:2024/06/11 12:11:09
类中用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);
na

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]; 大小不正确

你那delete语句的位置应该在new后面,否则你的变量hobby申请的内存没有还回去,所以就会弹出一个内存错误的对话框。