C ++: массив не был инициализирован при определении размера во время выполнения

У меня проблема с инициализацией массива double с размером, определенным во время выполнения.

MyPoly MyPoly::operator *(const MyPoly& other)
{
int newDegree = this->_degree + other._degree;
double array [newDegree] ;
fillArrayWithZeros(array, this->_degree + other._degree);

PolyRep::iterator it1 = this->_poly->begin();
PolyRep::iterator it2 = other._poly->begin();

for (int i = 0; i <= this->_degree; ++i, ++it1)
{
for (int j = 0; j <= other._degree; ++j, ++it2)
{
array[i + j] += (*it1) * (*it2);
}
it2 = other._poly->begin();
}
return MyPoly(array, this->_degree + other._degree);
}

Это во второй строке функции. Если плохо поставить число скажем — 10, это работает просто отлично.
Нет ошибок компиляции и ошибок времени выполнения, но когда я отлаживаю программу, я вижу, что массив пуст.

Дело в том, что в следующей функции инициализация работает нормально, хотя размер массива также определяется во время выполнения:

MyPoly MyPoly::operator +(const MyPoly& other)
{
int bigDegree = (this->_poly->getDegree() > other._poly->getDegree()) ?
this->_poly->getDegree() : other._poly->getDegree();

double arr [bigDegree];

PolyRep::iterator it1 = this->_poly->begin();
PolyRep::iterator it2 = other._poly->begin();

for (int i = 0; i <= this->_poly->getDegree(); ++i, ++it1)
{
arr[i] = *it1;
}

for (int i = 0; i <= other._poly->getDegree(); ++i, ++it2)
{
arr[i] += *it2;
}

return MyPoly(arr, bigDegree + 1);
}

Обе функции находятся в одном классе.

Может кто-нибудь объяснить, в чем проблема

0

Решение

В обоих кодах вы списываете конец массива, что может привести к произвольно плохому поведению. Вам нужно использовать < вместо <= в ваших циклах или выделите 2 дополнительных слота.

Чтобы ответить на ваш вопрос, вы правильно используете массивы во время выполнения.

2

Другие решения

В одном коде вы используете ->_degree а в другом вы используете ->getDegree(), Это действительно одно и то же?

0

А ты уже прошел курс программирования? Супер скидка!
Прокачать скилл $$$
×