重载+运算符的分段错误

Segmentation Fault in overloading + operator

本文关键字:分段 错误 运算符 重载      更新时间:2023-10-16

我正在写一个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;
}

唯一值得怀疑的是数组的索引。(胡乱猜想)

您已经设置了j=num.size,然后您使用num.number[j]sum.number[j],这可能是导致故障的原因。

看起来你是在迭代你的数组从size1

召回数组从0size-1

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

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

问题是您正在使用等于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){