我想创建一个当前对象的副本并将其存储在一个数组中,稍后我可以访问它。
我有一个班级
false
我在class Purpose{
public:
Purpose(){
max = 5;
elements = 0;
obj_elements = 0;
arr = new int[max];
}
Purpose( const Purpose &a){
max = a.max;
elements = a.elements;
obj_elements = a.obj_elements;
arr = new int[elements]
for( int i = 0; i < elements; i++ ){
arr[i] = a.arr[i]
}
}
Add(){
Purpose *tmp = new Purpose(*this);
arr_two[ obj_elements++ ] = tmp;
}
private:
int max;
int elements;
int obj_elements;
int *arr;
Purpose *arr_two[2];
}
数组中添加了一个int。
Add()方法创建当前对象的副本并将其存储在arr
数组中,但是当我想打印复制对象的元素时,它会抛出seg错误。
arr_two
arr元素的打印引发了段错误。其他属性打印没有问题。
打印数组值时程序崩溃/ seg故障的原因是什么?当我在void Purpose::Print_It(){
cout << arr_two[ obj_elements - 1 ] -> max << endl;
cout << arr_two[ obj_elements - 1 ] -> elements << endl;
cout << arr_two[ obj_elements - 1 ] -> obj_elements << endl;
for( int i = 0; i < arr_two[ obj_elements - 1 ] -> elements ; i++){
cout << arr_two[ obj_elements - 1 ] -> arr[i] << endl
}
}
方法中打印数组的值时,它可以工作。
答案 0 :(得分:1)
调用大小为0的new []运算符(元素初始化为0)?
关于size_t参数,来自new []运算符的cplusplus website:
如果此参数为零,则该函数在成功时仍会返回一个明确的非空指针(尽管取消引用此指针会导致未定义的行为)。