下面我有一个自定义构造函数,它根据我的教师规范接收数组,数组大小和集合的名称。但是,当我运行此程序时,我正在获取分段核心转储。这里引用的集合是数据成员(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;
*/
}
答案 0 :(得分:0)
在构造函数中,您将大小存储在psize
(两次),但在operator<<
中引用numOfElements
,这是未初始化的,因此中有垃圾。
答案 1 :(得分:0)
如果将set声明为int * set,那么在你获取它之前首先分配内存/克隆它会更好。
set = new int[size];
然后,您可以在重载的运算符&lt;&lt;。
中访问它 s.set[i];