C++ 重载+运算符中的分段错误
我正在写一个类LongInt,我必须重载操作符+ 目前,输入值很好,但当它进入函数时,会显示一个完整的随机数列表,然后出现分段错误 我的职能是: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::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它解决了问题,只要你按照我的话去做。嗯,是的,它有点相同,但真正的问题是在其他地方。谢谢这真的很有帮助