Я пишу 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]
что может быть причиной сбоя.
Проблема в том, что вы используете индекс, равный размеру или 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){
Похоже, вы повторяете свои массивы size
до 1
.
Вспомогательные массивы выполняются от 0
до size-1
.
for(j=size;j>=2;j--)
Должно быть:
for(j=size-1;j>=1;j--)