我正在撰写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;
}
答案 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){