C ошибка компиляции: "объект переменного размера не может быть инициализирован"
почему я получаю сообщение об ошибке "объект переменного размера не может быть инициализирован" со следующим кодом?
int boardAux[length][length] = {{0}};
8 ответов:
Я предполагаю, что вы используете компилятор C99 (с поддержкой массивов динамического размера). Проблема в вашем коде заключается в том, что в то время, когда компиляторы видят ваше объявление переменной, он не может знать, сколько элементов есть в массиве (я также предполагаю здесь, из ошибки компилятора, что
length
не является константой времени компиляции).вы должны вручную инициализировать этот массив:
int boardAux[length][length]; memset( boardAux, 0, length*length*sizeof(int) );
вы получаете эту ошибку, потому что в языке C вы не можете использовать инициализаторы с массивами переменной длины. Сообщение об ошибке вы получаете в основном говорит все это.
инициализации 6.7.8
...
3 тип инициализируемого объекта должен быть массив неизвестного размера или объект тип, который не является переменной длиной тип массива.
это дает ошибку:
int len; scanf("%d",&len); char str[len]="";
Это также дает ошибку:
int len=5; char str[len]="";
но это прекрасно работает:
int len=5; char str[len]; //so the problem lies with assignment not declaration
вы должны поставить значение следующим образом:
str[0]='a'; str[1]='b'; //like that; and not like str="ab";
после объявления массива
int boardAux[length][length];
самый простой способ присвоить начальные значения нулю - это использовать цикл for, даже если он может быть немного длинным
int i, j; for (i = 0; i<length; i++) { for (j = 0; j<length; j++) boardAux[i][j] = 0; }
вы не можете этого сделать. Компилятор C не может сделать такую сложную вещь на стек.
вы должны использовать кучу и динамическое распределение.
Что вам действительно нужно сделать:
- вычислить размер (nmsizeof (элемент)) из памяти вам нужно
- вызов malloc (размер) для выделения памяти
- создать метод доступа: инт* доступ(ПТР,х,м,размер строки) { возвращение ПТР + г*размер строки + х; }
использовать * доступ(boardAux, x, y, размер) = 42 для взаимодействия с матрицей.