2017-01-07 2 views
-2

Я пытаюсь установить значения в 2D-массив (предусмотреть игровое поле или некоторую сетку), используя приведенный ниже код, но я получаю «переменный размер» ошибка может быть проигнорирована.Использование memset для предотвращения «объекта переменной величины не может быть инициализировано»

Я пробовал решать его с помощью memset, но безрезультатно.

Большое спасибо и некоторые подсказки будут высоко оценены.


// constants 
#define DIM_MIN 3 
#define DIM_MAX 9 

// board 
int board[DIM_MAX][DIM_MAX]; 


void init(void) 
{ 
    int highest = d^2; 

    for (int i = 0; i < d; i++) 
    { 
     for (int j = 0; j < d; j++) 
     { 
      int board[i][j] = highest - 1; 
     } 
    } 
    if (d % 2 == 0) 
    { 
     int board[d-1][d-2] = 2; 
     int board[d-1][d-3] = 1; 
    }  
} 
+3

Вы рассказываете нам о 'memset', но тогда не беспокойтесь, показывая нам, как вы его используете? – John3136

+0

Странно, вы ставите 'int' перед каждым использованием ранее объявленной« платы », но' d' пока неизвестно. –

+0

Также 'd^2' не является способом квадрата' d'. Вместо этого попробуйте 'd * d'. –

ответ

3

Проблема с кодом в for теле цикла, который говорит

int board[i][j] = highest - 1; 

, что вы хотите, вероятно,

board[i][j] = highest - 1; 

То же самое касается if состояния тела , слишком.

Чтобы уточнить, что сообщение об ошибке, int board[i][j] = highest - 1; пытается определить новый VLA (variable length array), который не может быть инициализирован.

Цитирование C11, глава §6.7.9, инициализация (курсив моего)

типа лица для инициализации должен быть массивом неизвестного размера или полный объекта тип не тип массива переменной длины.

+0

Уважаемый Sourav, большое спасибо за это. Теперь я понимаю, спасибо за источник. – idol2k