Столкнулся с одной темой, которую никак не получается разобрать. Имеется следующий кусок кода с базовым классом Array и методом Input, в котором и кроется ошибка:
class Array {
public:
int *Mass, index;
Array() {
index = 0;
}
virtual void summ(Array Data) {}
virtual void foreach() {}
void Input();
};
void Array::Input() {
cout << "Массив : ";
for (int i = 0; i < index; i++) {
cin >> Mass[i];
}
}
Также имеется производный класс:
class SortArray : public Array {
public:
SortArray() {}
SortArray(int arrSize) {
index = arrSize;
int *Mass = new int[arrSize];
}
void summ(Array Data);
void foreach();
};
При попытке выполнить метод Input, для ввода чисел в массив производного класса возникает ошибка, поскольку память под динамический массив похоже была удалена, либо что - то другое. Где искать ошибку? Пробовал перекинуть сами методы, массив, изменять конструктор, но этот динамический массив так и выдает ошибку чтения. Как переработать код? Подскажите пожалуйста.
int arrSize;
cout << "Введите размер первого массива: ";
cin >> arrSize;
SortArray Arr1(arrSize);
Arr1.Input();
Ответ
Вот здесь
int *Mass = new int[arrSize];
вы выделили память, но указатель на нее сохранили не в поле класса, а в локальной переменной... И при выходе из конструктора, понятно, ее потеряли.
И еще - не оставляйте неинициализированных переменных. Например,
Array() {
index = 0;
}
чему после этого равен Mas? Мусору.
Впрочем, вообще вызывает недоумение - Array нигде ни разу не инициализирует Mas, но функция Input - именно в нем... Почему вы спроектировали иерархию именно так?
Комментариев нет:
Отправить комментарий