1

最小限で再現可能な例を示すために、問題を単純化します。

Polynomial係数の配列の単なるラッパーであるクラスがあります。下流での私の分析の便宜上、max に関するテンプレートとしてそれを記述することをお勧めします。表現できる程度。N次数の多項式は係数を保持することに注意してくださいN+1

template <const unsigned int MaxDeg>
class Polynomial {

  public:

    int *coefficients;

    Polynomial(int* arr) {
        coefficients = new int[MaxDeg+1];
        for (unsigned int i=0; i <= MaxDeg; i++) coefficients[i] = arr[i];
    }

    Polynomial() {
        coefficients = new int[MaxDeg+1]();
    }

    ~Polynomial() {
        delete[] coefficients;
    }

    int& operator[](int index) const {
        return coefficients[index];  
    }
};

mainのコードでは、多項式を 1 つ作成し、それに対して 1 つのサイズの配列を作成してコードをテストします。

    int f_q[] = {5, 9, 6, 16, 4, 15, 16, 22, 20, 18, 30};
    Polynomial<10> P_f_q(f_q);
    Polynomial<10> P_arr[1] = {P_f_q}; // this line raises error

次のメモリ エラーが発生します。

test(33770,0x10de6be00) malloc: *** error for object 0x7fef43605420: pointer being freed was not allocated
test(33770,0x10de6be00) malloc: *** set a breakpoint in malloc_error_break to debug
[1]    33770 abort      ./test

実際には、私のコードはもっと複雑ですが、できる限りコメントアウトしましたが、エラーがどこから来たのか本当にわかりません(?)

4

0 に答える 0