我想创建当前对象的拷贝并将其存储在一个数组中,稍后我可以在其中访问它。
我有课
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];
}
我在 arr
数组中添加整数。
Add() 方法创建当前对象的拷贝并将其存储在 arr_two
数组中,但是当我想打印复制对象的元素时,它会抛出段错误。
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
}
}
打印 arr 的元素会引发段错误。其他属性打印没有问题。
是什么导致程序在打印数组值时崩溃/段错误?当我在 Add()
方法中打印数组的值时,它起作用了。
最佳答案
你调用了大小为0的new[]运算符(元素初始化为0)?
来自 cplusplus website关于 size_t 参数的 new[] 运算符:
If this argument is zero, the function still returns a distinct non-null pointer on success (although dereferencing this pointer leads to undefined behavior).
关于c++ - 创建对象的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664556/