C++ 重载+运算符中的分段错误

C++ 重载+运算符中的分段错误,c++,C++,我正在写一个类LongInt,我必须重载操作符+ 目前,输入值很好,但当它进入函数时,会显示一个完整的随机数列表,然后出现分段错误 我的职能是: 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--

我正在写一个类LongInt,我必须重载操作符+

目前,输入值很好,但当它进入函数时,会显示一个完整的随机数列表,然后出现分段错误

我的职能是:

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],这可能是导致错误的原因。

看起来您正在对数组进行迭代,从大小到1

调用数组的大小从0到1

应该是:

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(sum.number[j]>10){
可以写得更简单些吗

if( size >=num.size ){
这个条件呢

if((size==num.size) || (size>num.size)){
if(sum.number[j]>10){
这是无效的。一定有

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

它在哪里坠毁?你试过在调试器中运行它吗?你试过调试器吗?你的类定义是什么样子的?更具体地说,数字是如何声明和分配的?不是直接的问题,但是你有一个复制粘贴编码的坏例子-这两个循环实际上是相同的,可以很容易地被重新分解成一个循环。非常感谢,但这仍然不能解决问题:/@CS Student它解决了问题,只要你按照我的话去做。嗯,是的,它有点相同,但真正的问题是在其他地方。谢谢这真的很有帮助