Страницы

Поиск по вопросам

суббота, 15 июня 2019 г.

C++. Не могу расширить динамический массив в методе?

У меня получается только на 1 расширить.(и это кстати странно) Название: add:
class double_Digit { double digit; int size; double *ar; public: double_Digit() :size(NULL), ar(nullptr) { } double_Digit(int _size) :size(_size), ar(nullptr) { if (size > 0) { ar = new double[size]; } } ~double_Digit() { if (ar) { delete[]ar; } } double* add(int sizetmp) { double* arr = new double[sizetmp]; for (int i = 0; i < size; i++) { *(arr + i) = *(ar + i); } delete[]ar; double* ar = new double[sizetmp]; for (int i = 0; i < size; i++) { *(ar + i) = *(arr + i); } delete[]arr; size++; return ar; } double* GetArray() const { return ar; } int GetSize() const { return size; } };


Ответ

У вас бессмысленный метод Add, так как вы в нем пытаетесь копировать неинициализированные массивы. Вы в конструкторах в лучшем случае распределили динамически память под массив, но ничем его не инициализировали. Либо вам следует изменить конструкторы таким образом, чтобы они инициализировали массив при его создании, либо чтобы класс поддерживал число актуальных элементов в массиве.
Потом вообще не понятно, почему для размера массива используется знаковое целочисленный тип. Правильно было бы использовать тип size_t, чтобы не проверять соответствующее значение, является ли оно отрицательным или нет.
Если предположить, что массив каким-то образом инициализирован, то функция Add может выглядеть следующим образом
double * add( size_t new_size ) { if ( new_size != this->size ) { double *tmp = new double[new_size]();
size_t n = std::min( this->size, new_size );
for ( size_t i = 0; i < n; i++ ) tmp[i] = this->ar[i];
delete [] this->ar;
this->ar = tmp; this->size = new_size; }
return this->ar; }

Комментариев нет:

Отправить комментарий