У меня только что был экзамен в моем классе сегодня - чтение кода C и ввода, и требуемый ответ был тем, что будет отображаться на экране, если программа действительно работает. Один из вопросов, объявленных a[4][4]
как глобальная переменная и в точке этой программы, пытается получить доступ к a[27][27]
, поэтому я ответил на что-то вроде " "Доступ к массиву за пределами его границ" это поведение undefined, но учитель сказал, что a[27][27]
будет иметь значение 0
.
Впоследствии я попробовал некоторый код, чтобы проверить, истинна ли или нет всякая неинициализированная golbal-переменная в значение 0
. Ну, это правда.
Итак, теперь мой вопрос:
- Похоже, какая-то дополнительная память была очищена и зарезервирована для запуска кода. Сколько памяти зарезервировано? Почему компилятор резервирует больше памяти, чем должен, и для чего он нужен?
- Будет ли
a[27][27]
быть0
для всей среды?
Изменить:
В этом коде a[4][4]
объявлена глобальная переменная только, а в main()
есть еще несколько локальных.
Я попробовал этот код снова в DevС++. Все они 0
. Но это не так в VSE, в котором наибольшее значение 0
, но некоторые из них имеют случайное значение, как указал Vyktor.