CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

放分!!请帮偶找出错误

楼主etu5(外星人)2002-10-09 22:36:53 在 C/C++ / C语言 提问

#include   <iostream.h>  
  #include   <string.h>  
  class   TfirstDemo  
  {  
  private:  
  char   name[20];  
  int   age;  
  int   sex;  
          int   height;  
  int   weight;  
  public:  
  char*   getName();  
  int   getAge();  
        char getSex();  
  int   getHeight();  
  int   getWeight();  
  virtual   void   showAll();  
          TfirstDemo(int   a,int   b,int   c,int   d,char*   n):                             //构造函数  
  age(a),sex(b),height(c),weight(d)  
  {  
          strncpy(name,n,sizeof(name));  
  };  
  };  
  class   TsecondDemo:public   TfirstDemo  
  {  
          int   ID;  
   
  public:  
  char   *Pr;  
  int   getID();  
  void   putValue()  
  {  
     
  }  
  void   showAll();  
          TsecondDemo(int   a,int   b,int   c,int   d,char*   n,int   id):TfirstDemo(a,b,c,d,n)  
  {  
            ID=id;  
    Pr=new   char[20];  
    Pr="Demo";  
  }  
  ~TsecondDemo()  
  {  
    cout<<"delete   this   point"<<endl;  
    delete   Pr;         /*问题出在这里~偶是用VC6.0编译的  
                                                    为什么偶delete   Pr错了呢?只要去掉这个句子就以运行成  
                                                  功*/  
  }  
   
  };  
  int   TsecondDemo::getID(){return   ID;};  
  void   TsecondDemo::showAll()  
  {  
  cout<<"姓名:"<<getName()<<endl;  
  cout<<"性别:"<<getSex()<<endl;  
  cout<<"年龄:"<<getAge()<<endl;  
  cout<<"身高:"<<getHeight()<<endl;  
  cout<<"体重:"<<getWeight()<<endl;  
  cout<<"ID:   "<<getID()<<endl<<endl;  
  };  
  int   TfirstDemo::getAge(){return   age;};  
  char   TfirstDemo::getSex(){if(sex==1)   return   'G';else   return   'M';};  
  int   TfirstDemo::getHeight(){return   height;};  
  int   TfirstDemo::getWeight(){return   weight;};  
  char*   TfirstDemo::getName(){return   name;};  
  void   TfirstDemo::showAll()  
  {  
  cout<<"姓名:"<<getName()<<endl;  
  cout<<"性别:"<<getSex()<<endl;  
  cout<<"年龄:"<<getAge()<<endl;  
  cout<<"身高:"<<getHeight()<<endl;  
  cout<<"体重:"<<getWeight()<<endl<<endl;  
  };  
  void   fn(TfirstDemo   &s){  
  s.showAll();  
  }  
  void   main(){  
  cout<<"HBB   is   Hanbobo^^"<<endl;  
  TfirstDemo   chen(20,1,172,105,"etu5");  
  TsecondDemo   qin(20,1,173,110,"DemoSoft",29);  
  fn(chen);  
  fn(qin);  
  cout<<qin.Pr<<endl;  
  } 问题点数:20、回复次数:6Top

1 楼stone112979(梦醒十分)回复于 2002-10-09 22:52:15 得分 0

delete   好像没错。  
  我觉得好像应该把析构函数放在上面。Top

2 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2002-10-09 22:53:54 得分 0

delete使用错误,你new的是数组,必须使用delete   []释放数组  
  改成  
  ~TsecondDemo()  
  {  
    cout<<"delete   this   point"<<endl;  
    delete   []Pr;         /*问题出在这里~偶是用VC6.0编译的  
                                                    为什么偶delete   Pr错了呢?只要去掉这个句子就以运行成  
                                                  功*/  
  }Top

3 楼Zark(金陵五月)回复于 2002-10-09 22:56:06 得分 15

之所以错,是因为这两句,  
        Pr=new   char[20];  
        Pr="Demo";  
   
  第一句在堆上取了20字节的内存,并将pr指向这块内存.  
  第二句将pr指向一个只读字符串,原指向已被丢弃,因此如果delete,将会出错.  
   
  改为  
        Pr=new   char[20];  
        strcpy(Pr,"Demo");  
   
   
  Top

4 楼shh03(半山腰)回复于 2002-10-09 23:00:29 得分 5

Pr="Demo";//   这句有点问题,好像字符串是一个常量,存储在内存的常量区,  
                      //而用delet   Pr   ,删的是在堆上分配的内存,我也说不清楚  
                    //你不如在Pr=new   char[20];后直接往*p一个字符一个字符地放Top

5 楼zhpsam109(JACKY.昊昊)回复于 2002-10-10 09:08:09 得分 0

zark说的很正确!!!Top

6 楼etu5(外星人)回复于 2002-10-10 15:33:19 得分 0

谢谢金陵五月和半山腰两位的帮助!:)Top

相关问题

  • 帮忙分析一下错误。
  • 帮着找错误,马上散分
  • 帮忙指正一下错误 50 分
  • 帮我测试错误,一个10分
  • 帮忙分析_DllMainCRTStartup中的错误
  • 错误分析
  • 分页错误???
  • 错误分析
  • wsad的错误提示,哪位好汉帮忙分析一下错误原因
  • 找错误!50分!

关键词

  • tfirstdemo
  • tseconddemo
  • pr
  • char

得分解答快速导航

  • 帖主:etu5
  • Zark
  • shh03

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo