私はテーブルルックアップに基づいて異なる長さの配列を返す関数を持っています。関数内で必要なメモリをmallocしていますが、ポインタから配列をどのように埋めることができますか? コンパイラは、両方の試行(コメント行)で同じエラーを投げています。助けてください!ダイナミックメモリ割り当て後にアレイを初期化する方法は?
int lookup(const char *name, float *factors) {
int length;
if(!strcmp(name, "foo")) {
length = 6;
factors = malloc(length * sizeof(float));
// *factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
// factors = {0, -0.9, -4.9, -8, -7.8, -23.9};
}
else if(!strcmp(name, "bar"))
{
length = 4;
factors = malloc(length * sizeof(float));
// *factors = {0, -3, -6, -9};
}
// .......................
// more else if branches
// .......................
else // error: name not found in table
{
factors = NULL;
fprintf(stderr, "name not found in table!!\n");
return 0;
}
return length;
}
私はこの考えを念頭に置いていましたが、もう少しエレガントな方法はありませんか? – Aamir
さて、それはかなりエレガントです。もう一つの解決策は、メモリを割り当てることではなく、単に「factors = initials」を割り当てます。しかし、後で要因を変更する場合は、うまくいかないでしょう。 –