Я хотел бы создать копию текущего объекта и сохранить его внутри массива, где позже я могу получить к нему доступ.Создание копии объекта
У меня есть класс
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
, но когда я хочу напечатать элементы скопированного объекта, он выдает seg fault.
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
}
}
Распечатка элементов обрывов seg. Другие атрибуты печатаются без проблем.
Что приводит к сбою/сбою программы при печати значений массива? Когда я печатаю значения массива внутри метода Add()
, он работает.
Каждый аспект этого кода абсолютно ужасно не рекомендуется. Есть ли какие-либо причины для этого, и почему вы не можете просто использовать 'std :: vector' и сделать с ним? –
Я хотел бы практиковать без использования вектора. – Darlyn
Если вы просто практикуете, тогда это должно включать практику, выполняющую вашу собственную отладку. :) – nobar