0

実行時に決定されたサイズで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);
}

関数の2行目にあります。悪い数字を言うなら-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);
}

両方の関数は同じクラスにあります。

誰かが問題は何かを説明できますか

4

2 に答える 2

2

どちらのコードでも、配列の末尾を書き込んでいるため、勝手に悪い動作が発生する可能性があります。ループ<の代わりに使用するか、2 つの追加スロットを割り当てる必要があります。<=

あなたの質問に答えるために、それ以外の場合は、ランタイム サイズの配列を正しく使用しています。

于 2012-09-05T23:15:39.170 に答える
0

1 つのコードでは を使用し、もう 1 つのコードでは を使用->_degreeしています->getDegree()。それらは本当に同じものですか?

于 2012-09-05T23:32:26.533 に答える