2017-01-11 4 views
-2

Я хочу найти сумму двух двоичных чисел. Мой подход заключается в том, чтобы хранить отдельные биты в массиве, а затем печатать выходные данные, которые также хранятся в массиве размером больше, чем два предыдущих массива. Также размер обоих двоичных чисел одинаковый. Поэтому я написал следующий код, и с тех пор, как я начал работу с C++, я пишу его с помощью классов. Я просто хочу знать, почему я получаю «ошибка сегментации (ядро сбрасывали)»Ошибка сегментации в программе на C++

#include<iostream> 
#include<vector> 
using namespace std; 
class arrays{ 
private: 
    int n; 
public: 
    void input(){ 
     cout<<"Enter the size of arrays "; 
     cin>>n; 
    } 

    void array_creation(vector<int>Z){ 
     long int b; 
     int a; 
     cout<<"Enter the binary number "; 
     cin>>b; 
     while(b!=0){ 
      a=b%10; 
      Z.push_back(a); 
      b=b/10; 
     } 
     Z[-1]=0; 
    } 

    void output(vector<int>Z){ 
     cout<<"The sum of two binary numbers is "; 
     for(int a=0;a<n+1;a++) 
      cin>>Z[a]; 
    } 

    void logic_set(vector<int>Z,vector<int>Y,vector<int>X){ 
     for(int a=n-1;a>=0;a--){ 
      if(Z[a]==0 && Y[a]==0) 
       X[a+1]=0; 
      if(Z[a]==0 && Y[a]==1) 
       X[a+1]=1; 
      if(Z[a]==1 && Y[a]==0) 
       X[a+1]=1; 
      if(Z[a]==1 && Y[a]==1){ 
       X[a+1]=0; 
      label: 
       if(Z[a-1]==0) 
        Z[a-1]=1; 
       if(Z[a-1]==1) 
        Z[a-1]==2; 
      } 
      if(Z[a]==2){ 
       X[a+1]==Y[a]; 
       goto label; 
      } 
     } 
    } 
}; 
int main(){ 
    arrays a,b; 
    vector<int>A; 
    vector<int>B; 
    vector<int>C; 
    a.input(); 
    a.array_creation(A); 
    b.array_creation(B); 
    a.logic_set(A,B,C); 
    a.output(C); 
} 

Это точная ошибка только в том случае The exact error page

+4

Во-первых, запустить его в отладчике и точно выяснить, где он выходит из строя, и, возможно, даже выяснить, почему. У вас также есть неопределенное поведение в коде, и я не могу представить, почему у вас это получилось. Индексирование с '-1', почему? –

+7

'Z [-1] = 0;' выглядит очевидной проблемой. – melpomene

+0

Почему вы используете инструкцию 'goto'? – JonatanE

ответ

0

array_creation Также не заполнит вектор, как передается аргумент по значению, поэтому вместо этого вы получите временный объект. Вместо этого вы должны использовать ссылку.

array_creation (вектор & Z)

Смежные вопросы