私の関数neldermeadは次のようになります。
double * neldermead (double data[], double (*function)(int, double, double, double, double, double),
double ia1, double ia2, double ia3, double ia4, double ia5, double rad, int k) {
...
printf("8\n");
double * xout = malloc(5 * sizeof(double));
xout[0] = x[0][0];
xout[1] = x[1][0];
xout[2] = x[2][0];
xout[3] = x[3][0];
xout[4] = x[4][0];
printf("10\n");
return xout;
}
関数は次のように呼び出されます。
...
double * newX;
printf("11\n");
newX = neldermead (data, &function1, F1A1, F1A2, F1A3, F1A4, F1A5, 10, 10000);
printf("12\n");
...
出力は次のとおりです。
11
8
10
*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)
-fno-stack-protectorを使用すると、コードは正常に動作します。
配列を返す方法に何か問題がありますか?
///////////////////////////////////
参照渡しを行うようにコードを修正しました。
私の関数neldermeadは次のようになります。
double * neldermead (double * xout, double data[], double (*function)(int, double, double, double, double, double),
double ia1, double ia2, double ia3, double ia4, double ia5, double rad, int k) {
...
printf("8\n");
xout[0] = x[0][0];
xout[1] = x[1][0];
xout[2] = x[2][0];
xout[3] = x[3][0];
xout[4] = x[4][0];
printf("9\n");
}
関数は次のように呼び出されます。
...
double newX[5];
printf("10\n");
neldermead (newX, data, &function1, F1A1, F1A2, F1A3, F1A4, F1A5, 10, 10000);
printf("11\n");
...
出力は次のとおりです。
10
8
9
*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)
くそー、役に立たなかった。