超载+算子中的分段错误

时间:2014-03-21 15:13:16

标签: c++

我正在撰写class LongInt,我必须重载operator+

目前,输入值很好,但当它进入函数时,它会显示一个完整的随机数列表,然后发生分段错误(核心转储)

我的功能是:

LongInt LongInt::operator+(const LongInt num){
    LongInt sum;
    int k,j;
    //sum=number+num;
    if((size==num.size) || (size>num.size)){
        for(j=size;j>=2;j--){
            sum.number[j]=num.number[j]+number[j];
            if(sum.number[j]>10){
                k=sum.number[j]/10;
                sum.number[j]=sum.number[j]%10;
                number[j-1]+=number[j-1]+k;
            }
        }
    }
    else
        for(j=num.size;j>=2;j--){
            sum.number[j]=num.number[j]+number[j];
            if(sum.number[j]>10){
                k=sum.number[j]/10;
                sum.number[j]=sum.number[j]%10;
                number[j-1]+=number[j-1]+k;
            }
        }
    cout<<sum<<endl;
    return sum;
}

3 个答案:

答案 0 :(得分:5)

唯一可疑的是数组的索引。 (狂野猜测)

您已设置j=num.size,然后您正在使用可能导致错误的num.number[j]sum.number[j]

答案 1 :(得分:2)

您似乎正在将数组从size迭代到1

召回数组从0运行到size-1

for(j=size;j>=2;j--)

应该是:

for(j=size-1;j>=1;j--)

答案 2 :(得分:2)

问题是您使用的索引等于size或num.size,而我理解的有效范围是[0, size - 1]

此外,如果size>num.size那么这句话

sum.number[j]=num.number[j]+number[j];

也无效,因为num.number没有指数大于或等于num.size的元素。

考虑到这个条件

if((size==num.size) || (size>num.size)){

可写得更简单

if( size >=num.size ){

这个条件

if(sum.number[j]>10){

无效。必须有

if(sum.number[j]>9){