| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1120 人关注过本帖
标题:程序运行出错了
只看楼主 加入收藏
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
 问题点数:0 回复次数:5 
程序运行出错了
这是本人的一个编程作业题,是一个很简单的程序,编译可以通过,结果也能出现,但是有个严重的错误,因为出现结果的时候,总提示程序运行出错,我就是找不出来,希望哪位达人能指点我一下,感激不尽
//cow.h
#ifndef COW_H_
#define COW_H_

class Cow
{
private:
    char name[20];
    char *hobby;
    double weight;
public:
    Cow();
    Cow(char *nm, char *ho, double wt);
    Cow(const Cow &c);
    ~Cow();
    Cow & operator=(const Cow &c);
    void ShowCow() const;
};
#endif


//////////////////////////////////////////////////
//cow.cpp

#include <iostream>
#include "cow.h"
using namespace std;

//member methods

Cow::Cow()
{
    strcpy(name, "little white");
    
    hobby = new char[20];
    strcpy(hobby, "drink");
    weight=100;
}

Cow::Cow(const Cow &c)
{
    strcpy(name, c.name);
    int len=strlen(c.hobby);
    hobby=new char[len+1];
    strcpy(hobby, c.hobby);
    weight=c.weight;
}

Cow::Cow(char *nm, char *ho, double wt)
{
    strcpy(name, nm);
    int len=strlen(ho);
    hobby=new char[len+1];
    strcpy(hobby, ho);
    wt=weight;
}

Cow::~Cow()
{
    delete [] name;
    delete [] hobby;
}

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

void Cow::ShowCow() const
{
    cout << "name: " << name << endl;
    cout << "hobby: " << hobby << endl;
    cout << "Weight: " << weight << endl;

}

////////////////////////////////////////////
//usecow.cpp

#include <iostream>
#include "cow.h"
using namespace std;

int main()
{
    Cow cow1;
    Cow cow2("ketty", "eat", 100);
    //Cow cow3(cow2);

    cow1.ShowCow();
    cow2.ShowCow();
    //cow3.ShowCow();

    //Cow cow4=cow3;
    //cow4.ShowCow();

    return 0;
}
搜索更多相关主题的帖子: 运行 
2008-12-12 15:13
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
合并 起来 编译的 没有什么 错误提示?
在 ~Cow() 去掉delete [] name; 在operator = 加上 delete []hobby;
2008-12-12 16:21
zqm0209
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2008-1-2
收藏
得分:0 
楼上正解,name[20]是字符串数组,分配的存储空间在栈上,由程序自动释放,没有使用堆中的动态内存,不需要用delete回收内存空间
2008-12-12 19:29
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
2楼说的有道理。
hobby 应该用 delete[]
在类中定义的指针,应该在析构函数中用delete 把它释放,因为默认的析构函数仅仅是释放指针,而没有释放指针所指向的空间,那么,在类中定义的数组,要在析构函数中 把它释放吗?

学习切忌浮躁.
2008-12-12 20:33
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
动态数组需要,一般数组不需要...

学习需要安静。。海盗要重新来过。。
2008-12-13 09:54
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
收藏
得分:0 
感谢!我还了解到一种内存是需要显式调用析构函数的,那就是使用new布局操作符分配的内存。
比如说
 char * buffer= new char[512];
 Testing *pc = new (buffer) Testing;
则应该使用
pc->~Testing();

学习切忌浮躁.
2008-12-13 14:04
快速回复:程序运行出错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024224 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved