CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

c++运算符重载问题,调试出错

楼主zunyilbj(子木邦)2005-04-03 13:36:53 在 C/C++ / 新手乐园 提问

vc编译没问题,但在运行时出现:  
  file   :degheap.c  
  line:1044  
  Expression:CrtIsValidHeapPointer(pUserDate)  
  我的程序是这样的:  
  void   main(int   argc,   char*   argv[])  
  {  
  MyInt   iM("1234567890123");   //   整数对象初始化  
  MyInt   iN("3210987654321");  
  MyInt   iResult1;  
   
  iResult1   =iN;  
  iResult1.Display();  
  }  
  这了做一个可以计算任意整数加减法的类:  
  我觉得是等号的原因。  
  我的类:  
  #include   <iostream.h>  
  class   MyInt  
  {  
  char*   Integer;  
  bool   Negative;  
  public:  
  MyInt();  
  MyInt(char*   s);  
  ~MyInt();  
  const   MyInt   operator=(const   MyInt&){return   *this;};  
  friend   const   MyInt   operator+(const   MyInt&   left,const   MyInt&   right);  
  void   Display(){cout<<Integer<<endl;}  
  };  
  MyInt::MyInt()  
  {  
  // Integer=NULL;  
  Negative=false;  
  }  
  MyInt::MyInt(char*   s)  
  {  
  int   i=strlen(s),j=0,t=0;  
  Negative=false;  
  if(s[0]=='-'||s[0]=='+')//判断s的符号问题,如果是负号就存,其他情况不存  
  {  
  t=1;  
  if(s[0]=='-')  
  {  
  Negative=true;  
  Integer=new   char[i-1];  
  }  
  else   {Integer=new   char[i-1];}  
  }  
  else   Integer=new   char[i];  
  i--;  
  while   (i>=t)    
                {  
                  if   (s[i]>'9'||s[i]<'0')    
        {  
  cout<<"set   error"<<endl;    
  i=-1;  
  }  
  else   {Integer[j]   =   s[i];--i;   ++j;}//将s存进Integer,并让s的个位位于Integer[0],这是为了方便以后的计算  
                  }  
  }  
  MyInt::~MyInt()  
  {  
  delete   []Integer;  
  }  
  麻烦帮帮忙 问题点数:40、回复次数:9Top

1 楼zunyilbj(子木邦)回复于 2005-04-03 13:42:39 得分 0

哪位牛人帮帮忙Top

2 楼szws(克米帅)回复于 2005-04-03 15:14:37 得分 20

就你给出的东西来看,问题来这里:  
  构造函数中:  
  没有给Integer赋初值  
  // Integer=NULL;  
  但在析构函数中  
  delete   []Integer;  
   
  所以,我测试了下;  
  void   main()  
  {  
  MyInt   iResult1;  
  }  
  就出错了!  
  其他还没看!  
  Top

3 楼szws(克米帅)回复于 2005-04-03 15:49:16 得分 15

是等号的原因;  
  你重载错了  
                      MyInt   &   operator=(   MyInt   &   s)  
    {  
    Integer=new   char[strlen(s.Integer)+1];  
    strcpy(Integer,s.Integer);  
    return   *this;  
    }  
   
  另外,你的构造函数好象也有点问题;  
  输出的时候有乱码  
  如:  
  1234567890123葺葺葺軦  
   
  Integer=i+1(也就是:strlen(s)+1就对了)  
  class   MyInt  
  {  
  char*   Integer;  
  bool   Negative;  
  public:  
  MyInt();  
  MyInt(char*   s);  
  ~MyInt();  
    MyInt   &   operator=(   MyInt   &   s)  
    {  
    Integer=new   char[strlen(s.Integer)+1];  
    strcpy(Integer,s.Integer);  
    return   *this;  
    }  
    void   copy(char   *s)  
    {  
    Integer=new   char[strlen(s)+1];  
    strcpy(Integer,s);  
    }  
  friend   const   MyInt   operator+(const   MyInt&   left,const   MyInt&   right);  
  void   Display(){cout<<Integer<<endl;}  
  };  
  MyInt::MyInt()  
  {  
  Integer=NULL;  
  Negative=false;  
  }  
  MyInt::MyInt(char*   s)  
  {  
  int   i=strlen(s),j=0,t=0;  
  Negative=false;  
  if(s[0]=='-'||s[0]=='+')//判断s的符号问题,如果是负号就存,其他情况不存  
  {  
  t=1;  
  if(s[0]=='-')  
  {  
  Negative=true;  
  Integer=new   char[i];////////     改了  
  }  
  else   {Integer=new   char[i];}/////////   改了  
  }  
  else   Integer=new   char[i+1];     /////////                 改了  
  i--;  
  while   (i>=t)    
                {  
                  if   (s[i]>'9'||s[i]<'0')    
        {  
  cout<<"set   error"<<endl;    
  i=-1;  
  }  
  else   {Integer[j]   =   s[i];--i;   ++j;}//将s存进Integer,并让s的个位位于Integer[0],这是为了方便以后的计算  
                  }  
  Integer[j]='\0';                                     //改了,加个回车  
  }  
  MyInt::~MyInt()  
  {  
  delete   []Integer;  
  }  
   
   
  int   main()  
  {  
  MyInt   iM("1234567890123");   //   整数对象初始化  
  MyInt   iN("3210987654321");  
  MyInt   iResult1;  
   
  iResult1   =iN;  
          iResult1.Display();  
  return   0;  
  }  
   
   
  Top

4 楼yu2680020(劳心者治人,劳力者治与人,左手马哲,右手政经,编程三个代表去编程!唉,结果,干得好不如嫁得好-就是!)回复于 2005-04-03 15:52:42 得分 0

同意楼上的Top

5 楼goodluckyxl(被人遗忘的狗)回复于 2005-04-04 09:41:41 得分 5

肯定是指针的所有权分配混乱造成的  
   
  Top

6 楼zunyilbj(子木邦)回复于 2005-04-04 12:48:18 得分 0

szws(克米帅):我是不是把析构函数写错了?把指针分配错了。Top

7 楼szws(克米帅)回复于 2005-04-04 15:06:11 得分 0

你的‘=’重载错了。  
  构造函数里为什么把下面这句注释掉??  
  // Integer=NULL;  
  析构函数里却  
  delete   []Integer;  
  当然会出错!  
   
  Top

8 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-04 15:15:03 得分 0

markTop

9 楼MagicCarmack(MagiC++)回复于 2005-04-04 16:53:57 得分 0

mark  
  Top

相关问题

  • 运算符重载时代码出错
  • 在Dev-C++重载运算符问题
  • 重载运算符
  • 关于C++中运算符重载的问题
  • Delphi能象C++一样重载运算符吗?
  • String的+是不是像c++一样重载运算符?
  • 关于C++运算符重载的问题????
  • C++运算符重载的一个问题
  • C++运算符重载的一个问题
  • 关于C++中类的运算符重载的问题

关键词

  • myint
  • iresult1
  • 整数
  • 问题
  • 类
  • const
  • operator
  • display
  • char

得分解答快速导航

  • 帖主:zunyilbj
  • szws
  • szws
  • goodluckyxl

相关链接

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

广告也精彩

反馈

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