多次元配列で作業していますが、例外が出ますが、私は多くを検索しましたが、私が使用している答えは同じですが、例外はmatriz [i] = new二倍[n]。私はコメントなしとコメントなしの両方のソリューションを運がないと試みました。私は、この関数の外でテストしているので、C++の動的行列
void interpol(double *arr_x, double *arr_y, int n, double *results) {
//double** matriz = new double*[n];
double** matriz;
matriz = (double**) malloc(n * sizeof(double*));
for(int i = 0; i < n; i++){
//matriz[i] = new double[n+1];
matriz[i] = (double*) malloc(n+1 * sizeof(double));
for(int j = 0; j < n; j++) {
matriz[i][j] = pow(arr_x[i],j);
}
matriz[i][n] = arr_y[i];
}
gaussiana(matriz, n, results);
}
--- EDIT ---
機能gaussianaは、正常に動作しています。例外は、次のいずれかでスローされます。 // matriz [i] = new double [n]; matriz [i] =(double *)malloc(n * sizeof(double));
Interpolacion.exeで0x00071c4dの初回例外:0xc0000005で: アクセス違反読み取り場所0x00000000の
nがスローされた10以上
例外があることはありません。 Interpolacion.exeの0x774b15deで未処理の例外が発生しました。0xC0000005:0x00000000の場所を読み取るアクセス違反。 プログラム '[8012] Interpolacion.exe:Native'がコード-1073741819(0xc0000005)で終了しました。
---- EDIT ---- 私は最終的にそれが働いてしまった、問題はマトリズではなく、arr_x/arr_y、外部ルーチンがデータを送信間違った(奇妙なエラーとスタックトレースではなかったです
?それ以外の場合は、配列の境界を越えて実行することができます。とにかく、これはひどいコードです。長方形の行列が必要な場合は、平坦化された1次元配列、あるいはBoost.MultiArrayのようなものを使用するとよいでしょう。裸のポインタは、一般的にC++では悪いスタイルです。 –
この関数を呼び出すときのnの値は何ですか?私は255より多いと確信しています。 –
@KerrekSB申し訳ありませんが255ビットは私が走ったテストでしたが、私はnで試しました。 Boost.MultiArrayをお試しいただきますようお願い申し上げます。 –