これは私を困惑させました。構造がある場合:
struct MyType
{
float *data;
}
そして、データにメモリを割り当てるための init 関数:
void init(MyType *s, int length)
{
s->data = (float *)malloc(length*sizeof(float));
}
#define を使用して MyType の配列を宣言すると、期待どおりに動作します。
#define NUM_ELEMENTS 10
MyType myArr[NUM_ELEMENTS];
for (int i=0; i<NUM_ELEMENTS; i++)
{
init(&myArr[i], 1000);
}
ただし、スタック上の変数を使用して配列を宣言すると、奇妙な動作が発生します。
int numElements = 10;
MyType myArr[numElements];
...
物事を混乱させるだけだと思うコードの詳細について説明せずに、動作が何であるかを説明するのは困難です。#define 変数とスタック変数の間を行ったり来たりすることで、それが機能するかどうかが決まることはわかっているので、どこかに問題があるのではないかと思います。
私の質問は次のとおりです。私が行っていることはすべて合法であり、それはうまくいくはずですか、それとも明らかに間違ったことをしていますか? スタック変数を使用して、実行時に構成値から配列サイズを定義できるようにします。