首页 新闻 会员 周边 捐助

运行时出现debug assertion failed line1017.

0
悬赏园豆:80 [待解决问题]

自己去查过了,说是可能出现了野指针,但是我自己看了很久没有发现(可能我对野指针的概念本来就不是很清晰)。如果大神们有空就帮我看一看代码哪儿错了。如果没时间就告诉一下line1017是什么意思呢?第一次问问题就发整个代码,不好意思。

#include<iostream>
#include<cstring>
using namespace std;
class biginteger
{
  int *ma;
  int len;
public:
    biginteger(char *);
    char* operator +(biginteger n);
    char* operator -(biginteger n);
    char* operator*(biginteger n);
    int operator==(biginteger n);
    int operator!=(biginteger n);
    int operator>=(biginteger n);
    int operator>(biginteger);
    int operator<(biginteger);
    int operator<=(biginteger);
    ~biginteger(){delete []ma;};
};
biginteger::biginteger(char*a)
{
   int n=strlen(a),i;
   len=n;
    ma=new int[n]; 
for(i=0;i<n;i++)
   ma[i]=*(a+n-i-1)-'0';
}
char*biginteger::operator +(biginteger n)
{
  int i,t,temp=0;
  int max=(len>n.len?len:n.len);
  //int min=(len>n.len?n.len:len);
  int b[1000]={0};
  for(i=0;i<len;i++)b[i]=ma[i];
   for(i=0;i<n.len;i++)
   {
       t=n.ma[i]+b[i]+temp;
       if(t>9) b[i]=t-10;
       else b[i]=t;
       temp=t/10;
   }
   
   if(temp) b[i]+=temp;
   char *p=new char[max+1];
   for(i=0;i<max;i++)
       p[max-1-i]=b[i]+'0';
 
   p[max]=0;
 return p;
}
char*biginteger::operator -(biginteger n)
{   
   
    int leap=0,i,b[1000]; 
    if(n.len==len)
    {

        for(i=len-1;i>=0;i--)
        {
            if(n.ma[i]>ma[i]) {leap=1;break;}
            if(n.ma[i]<ma[i]){leap=2;break;}
        }
        if(i==-1) leap=3;
    }
 
    int temp=0,t=0;
    if(n.len>len||leap==1)
    { 
        for(i=0;i<len;i++)
        {t=n.ma[i]-ma[i]-temp;
        if(t<0) {b[i]=t+10;temp=1;}
        else {b[i]=t,temp=0;}
        }
        for(i=len;i<n.len;i++)
        {t=n.ma[i]-temp;
        if(t<0){b[i]=t+10;temp=1;}
        else {b[i]=t,temp=0;}
        }
    }
    if(n.len<len||leap==2)
    {
        for(i=0;i<n.len;i++)
        {t=ma[i]-n.ma[i]-temp;
        if(t<0) {b[i]=t+10;temp=1;}
        else {b[i]=t;temp=0;}
        }
        for(i=n.len;i<len;i++)
        {t=ma[i]-temp;
        if(t<0) {b[i]=t+10;temp=1;}
        else {b[i]=t;temp=0;}
        }
    }
    int max=(n.len>len?n.len:len);
char*p=new char[max];
if(leap==3){p[0]='0';p[1]=0;return p;}

if(b[max-1]==0) max-=1;
for(i=0;i<max;i++)
    p[max-1-i]=b[i]+'0';
    p[max]=0;
return p;
}
char* biginteger::operator *(biginteger n)
{
    int s=0,j,t,k,temp=0,i,b[1000][100]={0},m,*h;
    if(n.len<len)
    {
        m=n.len;
        h=n.ma;
        n.len=len;
        n.ma=ma;
        len=m;
        ma=h;
    }     
    int max=len+n.len;
    for(i=0;i<n.len;i++)
    {
        for(j=0;j<i;j++)
            b[i][j]=0;
        for(j=i;j<len+i;j++)
        {
            t=n.ma[i]*ma[j-i]+temp;
            if(t>9) {b[i][j]=t%10;temp=t/10;}
            else {b[i][j]=t;temp=0;}
        }
        if(temp) b[i][j]=temp;
    }
/*    for(i=0;i<n.len;i++)
    {
     for(j=0;j<max;j++)
     cout<<b[i][j]<<" ";
     cout<<"i="<<i<<endl;
    }*/
         temp=0;
    for(j=0;j<max;j++)
    {
        s=temp;
        for(i=0;i<n.len;i++)s+=b[i][j];
            if(s>9) {b[n.len][j]=s%10;temp=s/10;}
            else {b[n.len][j]=s;temp=0;}//////////
    }
    
    if(temp) {b[n.len][j]=temp;}
    for(i=j;i>0&&b[n.len][i]==0;i--)
        j--;
        j+=1;
    char*p=new char[j+1];
    for(k=0;k<j;k++)
    {
     p[j-k-1]=b[n.len][k]+'0';
    }
        if(p[0]=='0') p[1]=0;
        p[j]=0;    
    return p;
}

int biginteger::operator==(biginteger n)
{
   
    int i; 
    if(n.len==len)
    {
        for(i=len-1;i>=0;i--)
        {
            if(n.ma[i]>ma[i]) return 0;
            if(n.ma[i]<ma[i])return 0;
        }
        if(i==-1) return 1;
    }
    if(n.len>len)return 0;
    if(n.len<len)return 0;
}
int biginteger::operator!=(biginteger n)
{
        int leap=0,i; 
    if(n.len==len)
    {
        for(i=len-1;i>=0;i--)
        {
            if(n.ma[i]>ma[i]) {leap=1;return 1;}
            if(n.ma[i]<ma[i]){leap=2;return 1;}
        }
        if(i==-1) return 0;
    }
    return 1;
}
int biginteger::operator>=(biginteger n)
{
      int i; 
    if(n.len==len)
    {
        for(i=len-1;i>=0;i--)
        {
            if(n.ma[i]>ma[i]) return 0;
            if(n.ma[i]<ma[i])return 1;
        }
        if(i==-1) return 1;
    }
if(len>n.len)return 1;
if(len<n.len)return 0;
}
int biginteger::operator>(biginteger n)
{
         int i; 
    if(n.len==len)
    {
        for(i=len-1;i>=0;i--)
        {
            if(n.ma[i]>ma[i]) return 0;
            if(n.ma[i]<ma[i])return 1;
        }
        if(i==-1) return 0;
    }
    if(len>n.len)return 1;
    if(len<n.len)return 0;
}
int biginteger::operator<(biginteger n)
{
         int i; 
    if(n.len==len)
    {
        for(i=len-1;i>=0;i--)
        {
            if(n.ma[i]>ma[i]) return 1;
            if(n.ma[i]<ma[i])return 0;
        }
        if(i==-1) return 0;
    }
if(len<n.len)return 1;
if(len>n.len)return 0;
}
int biginteger::operator<=(biginteger n) 
{
         int i; 
    if(n.len==len)
    {
        for(i=len-1;i>=0;i--)
        {
            if(n.ma[i]>ma[i]) return 1;
            if(n.ma[i]<ma[i])return 0;
        }
        if(i==-1) return 0;
    }
if(len<n.len)return 1;
if(len>n.len)return 0;
}
int main()
{
    char a[1000],b[1000],op[2]="+";
    while(cin>>a>>op>>b)
    {
    biginteger s1(a),s2(b);
    if(op[1]==0)
    {
        char*p=0;
            if(op[0]=='+'){ p=(s1+s2);cout<<p<<endl;    delete[]p;}
           if(op[0]=='-'){p=(s1-s2);cout<<p<<endl;    delete[]p;}
           if(op[0]=='*'){p=(s1*s2);cout<<p<<endl;    delete[]p;}
           if(op[0]=='>'){cout<<(s1>s2)<<endl;}
           if(op[0]=='<'){cout<<(s1<s2)<<endl;}
    }
        if(op[1]=='=')
        {
            if(op[0]=='=')cout<<(s1==s2)<<endl;
            if(op[0]=='>')cout<<(s1>=s2)<<endl;
            if(op[0]=='<')cout<<(s1<=s2)<<endl;
            if(op[0]=='!')cout<<(s1!=s2)<<endl;
        }
    }
    return 0;
}

 

nancy cai的主页 nancy cai | 初学一级 | 园豆:122
提问于:2013-12-23 18:47
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册