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」というエラーが表示されなくなります。また、使用が終わったら忘れずにメモリを解放する必要があります。
コメント