Ошибка сегментации при перегрузке + оператор

0

Я пишу 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;
}
  • 1
    Где он падает? Вы пытались запустить его в отладчике?
  • 1
    Вы пробовали свой отладчик?
Показать ещё 2 комментария
Теги:

3 ответа

5

Единственная подозрительная вещь - это индексирование массивов. (Грубое предположение)

Вы установили j=num.size а затем вы используете num.number[j] или sum.number[j] что может быть причиной сбоя.

2

Проблема в том, что вы используете индекс, равный размеру или 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){
  • 0
    большое спасибо, но это все еще не решает проблему: /
  • 0
    @CS Student Это решает проблему при условии, что вы будете делать согласно моим замечаниям.
Показать ещё 1 комментарий
2

Похоже, вы повторяете свои массивы size до 1.

Вспомогательные массивы выполняются от 0 до size-1.

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

Должно быть:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню