通过构造函数传递动态分配的数组

时间:2015-11-15 02:16:29

标签: c++ arrays

下面我有一个自定义构造函数,它根据我的教师规范接收数组,数组大小和集合的名称。但是,当我运行此程序时,我正在获取分段核心转储。这里引用的集合是数据成员(int * set),psize是数组的物理大小。我该如何解决这个问题?

//custom constructor
Set::Set( int array[] , int size, char name ){

        set = new int[size];

        psize = ( size > 0 ? size: DEFAULTSIZE);
        numOfElements = size;

        set = array;

        if (!set){
                cout << "Cannot Allocate Memory, exiting program... " << endl;
                exit(1);
        }

        Set::name = name;
}

ostream &operator<<( ostream &out, const Set &s){

    cout << "The Elements of your set are: " << endl;
    cout << "{" ;
    for ( int i = 0; i < s.numOfElements; i++){
            out << s.set[i];
            if ( i < s.numOfElements - 1){
                    out << ',';
            }
    }
    cout << "}" << endl;
    cout << "Number of Elements is  " << s.getNumOfElements() << endl;
}

int main(){
        int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int arr2[3] = {2, 4, 11};

        Set A( arr1, 10, 'A');
        Set B( arr2, 3, 'B');
        cout << A;
        cout << B;

        /*Set C;
        cin >> C;
        cout << C;

        Set D(A);

        cout << D;

        Set E = A + C;
        cout << E;
*/
}

2 个答案:

答案 0 :(得分:0)

在构造函数中,您将大小存储在psize(两次),但在operator<<中引用numOfElements,这是未初始化的,因此中有垃圾。

答案 1 :(得分:0)

如果将set声明为int * set,那么在你获取它之前首先分配内存/克隆它会更好。

set = new int[size];

然后,您可以在重载的运算符&lt;&lt;。

中访问它
 s.set[i];