【C言語】variable-sized object may not be initialized

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

コメント

タイトルとURLをコピーしました