最小限で再現可能な例を示すために、問題を単純化します。
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
実際には、私のコードはもっと複雑ですが、できる限りコメントアウトしましたが、エラーがどこから来たのか本当にわかりません(?)