Ошибка в многомерной программе массивов в C

Я сделал программу на C, которая включает в себя многомерные массивы (он печатает multidimensional array символов), чтобы немного пересмотреть, но я наткнулся на ошибку.

Мой ожидаемый результат программы:

. . . A . . . . . 

Однако я получаю:

 . . A //Not meant to be 'A' but rather a '.' A . . . . . 

Мне интересно, как я получаю это дополнительное «A» в позиции [0] [2], и как я могу исправить эту проблему.

Вот мой код:

 #include  void initArray(char shape[][2]); main() { char shape[2][2]; int i, j; initArray(shape); shape[1][0] = 'A'; printf("%c\n%c\n%c\n", shape[0][0], shape[0][1], shape[0][2]); printf("%c\n%c\n%c\n", shape[1][0], shape[1][1], shape[1][2]); printf("%c\n%c\n%c\n", shape[2][0], shape[2][1], shape[2][2]); getchar(); } void initArray(char shape[][2]) { int i, j; for(i = 0; i < 3; i ++) { for(j = 0; j < 3; j++) { shape[i][j] = '.'; } } } 

Большое спасибо = D

Поскольку вам нужно зацикливаться до < 2 поскольку shape объявлена ​​как shape[2][2]

  for(i = 0; i < 2;i++) for(j = 0; j < 2; j++) 

Это будет перебирать shape в строке и столбцах 0-1 включительно включительно

Возможным способом было бы избежать многомерных массивов и использовать простые массивы. Затем вместо char shape[2][2]; вы заявляете

  char shape[4]; 

и shape[2*i+j] кода shape[2*i+j] вместо shape[i][j] . (BTW компилятор преобразует позже в первый).

Используйте отладчик (например, gdb ), чтобы узнать, имеют ли значения i и j значимые значения. И добавьте assert(i>=0 && i<2) в соответствующих местах.

Помните, что массив объявлен char arr[4]; (например, моя shape выше) принимает только индекс от 0 до 3 (т. е. 4-1), т. е. использует arr[0] , ... arr[3] или arr[i] с интегралом i между 0 и 3. Доступ к arr[4] (или arr[17] или arr[i+1] когда i равно 3) является неопределенным поведением (все может случиться по стандарту C, включая коллапс Вseleniumной, который будет стандартным). Эта конкретная ошибка довольно распространена и называется переполнением буфера . Он используется во вредоносных программах.