C言語で「variable-sized object may not be initialized」というエラーが表示される場合、その変数のサイズが定義されていないか、定義されていても初期化されていないことが原因です。
例えば、次のようなコードがある場合
int main() {
int n;
int a[n] = {0};
...
}このように配列の要素数を変数nで指定している場合、変数aは可変長配列となります。
しかし、可変長配列は静的にサイズが決まるものではないため、初期化することができません。
そのため、「variable-sized object may not be initialized」というエラーが表示されます。
このような場合、可変長配列を使用するには、動的にメモリを確保し、そこに値を格納する必要があります。
例えば、次のように書き換えることができます。
int main() {
int n;
int *a = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
a[i] = 0;
}
...
}このように、動的にメモリを確保して値を格納することで、「variable-sized object may not be initialized」というエラーが表示されなくなります。また、使用が終わったら忘れずにメモリを解放する必要があります。

コメント