oopsi
oopsi

Reputation: 2039

C++ : Array no been initialized when size is determined in runtime

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

Answers (2)

Keith Randall
Keith Randall

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

Keith Randall
Keith Randall

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

Related Questions