私はツリークラスとグローバル関数を作成しました。私はTreeクラスの関数 'insert'は、グローバル関数から '返された'別の配列を使って初期化された配列を作成しました。グローバル関数から返された配列は、その関数内でうまく動作しますが、 'insert'関数の中で配列(必須配列)に代入されると、ガベージ値が与えられます。配列返り値
は、ここでは、割り当てを解除されますスタック上に割り当てられた(未定義の動作の原因となる)、一時、ローカル変数、にpointer
を戻ってきている
float *func_calc(...,...,...,...)
{
float decisions[17] = { 0 };
....
.......
......... // Put Values into the 'decisions' array
return decisions;
}
class Tree
{
..
....
.....
insert(...,...,...,...)
{
....
float* fun_array = new float[17];
float min_num = 0;
for (int i = 1; i <= 6; i++)
{
if (i == 1)
{
fun_array = func_calc(...,...,...,...); // same arguments as the insert function arguments
min_num = fun_array[0];
}
else
{
fun_array = entropy(i, array, arraysize, rD);
float num = entfun_array[0];
if (num < min_ent)
{
min_num = num ;
}
}
}
}
};
int main()
{
Tree T1;
T1.insert(... , ... , ..., ...);
}
ローカル変数へのポインタを返します。これはUBです。 – Borgleader
コードを書式設定するのに少し努力できますか? – CharlesB
浮動小数点のベクトルを使って、 – pm100