C++ C+中的分段错误+;程序

C++ C+中的分段错误+;程序,c++,arrays,C++,Arrays,我想求两个二进制数的和。我的方法是将单个位存储在一个数组中,然后打印输出,输出也存储在比前两个数组大一的数组中。两个二进制数的大小也是相同的。所以我写了下面的代码,因为我开始用C++,所以我用类来写。我只是想知道为什么会出现“分段错误(核心转储)”的情况 #包括 #包括 使用名称空间std; 类数组{ 私人: int n; 公众: 无效输入(){ coutn; } 创建空数组(矢量){ 长int b; INTA; 库特布; 而(b!=0){ a=b%10; Z.推回(a); b=b/10; }

我想求两个二进制数的和。我的方法是将单个位存储在一个数组中,然后打印输出,输出也存储在比前两个数组大一的数组中。两个二进制数的大小也是相同的。所以我写了下面的代码,因为我开始用C++,所以我用类来写。我只是想知道为什么会出现“分段错误(核心转储)”的情况

#包括
#包括
使用名称空间std;
类数组{
私人:
int n;
公众:
无效输入(){
coutn;
}
创建空数组(矢量){
长int b;
INTA;
库特布;
而(b!=0){
a=b%10;
Z.推回(a);
b=b/10;
}
Z[-1]=0;
}
无效输出(矢量){
cout=0;a--){
如果(Z[a]==0&&Y[a]==0)
X[a+1]=0;
如果(Z[a]==0&&Y[a]==1)
X[a+1]=1;
如果(Z[a]==1&&Y[a]==0)
X[a+1]=1;
如果(Z[a]==1&&Y[a]==1){
X[a+1]=0;
标签:
如果(Z[a-1]==0)
Z[a-1]=1;
如果(Z[a-1]==1)
Z[a-1]==2;
}
如果(Z[a]==2){
X[a+1]==Y[a];
后藤标签;
}
}
}
};
int main(){
阵列a、b;
向量;
向量;
向量;
a、 输入();
a、 数组创建(a);
b、 数组创建(b);
a、 逻辑_集(a,B,C);
a、 产出(C);
}
这正是以防万一的错误

另外,由于参数是按值传递的,所以创建数组时不会填充向量,因此将填充临时对象。 您应该使用引用来代替


数组创建(vector&Z)

首先,在调试器中运行它,找出它崩溃的确切位置,甚至可能找出原因。您的代码中也有未定义的行为,我无法想象您为什么会有这种行为。用
-1
索引,为什么?
Z[-1]=0看起来是个明显的问题。您应该更好地格式化代码,使其更具可读性。对于那些愿意帮助的人来说,这是比较容易的。@ SamiKuhmonen:代码>列表[-1 ] < /Cord>是有效的Python,它与C++中的代码> vector .Buffely./代码>相同。我认为还有其他语言也有相同的惯例。显然,它在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);
}