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