Reputation: 2039
I have a problem with initializing an array of double with the size determined in runtime.
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);
}
It's in the second line of the function. If ill put a number say - 10 it works just fine. There is no compilation error and no runtime error, but when i debug the program i see the array is empty.
The thing is that in the following function the initialization works fine although the size of the array is being determined in runtime as well :
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);
}
Both function are in the same class.
Can someone explain what is the problem
Upvotes: 0
Views: 267
Reputation: 23265
In one code, you're using ->_degree
and in the other you're using ->getDegree()
. Are those really the same thing?
Upvotes: 0
Reputation: 23265
In both codes, you are writing off the end of the array, which can cause arbitrarily bad behavior. You need to use <
instead of <=
in your loops, or allocate 2 extra slots.
To answer your question, you are otherwise using runtime-sized arrays correctly.
Upvotes: 2