Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Выход за предел массива.

tiuyuiyui iyiyuy Знаток (287), закрыт 12 лет назад
Всем не хворать.
Объявил массив из одного элемента, дальше написал полнейший бред:
int mass [1];
mass [9] = 5;
mass [-5] = 6;
mass ['!'] = 707;
printf ("%-5d %d %d %d", mass [9], mass [-5], mass [100500], mass ['!']);

Вопрос1) Каким образом я смог изменить значение ячейки массива, которой несуществует? (2-4строки)
Вопрос2) Разве можно задавать отрицательный номер массива? (строка 3)
Вопрос3) Каким образом программа считала данные с номера массива, которого не существует + более того значение не изменялось (3модификатор принтфа) - если данные 'мусор', прошу указать откуда этот 'мусор' берется.

PS: во время работы проги, ошибок компилятор не выдает.
Лучший ответ
Юрий-17 Гений (76476) 12 лет назад
Здесь ничего удивительного нет. Просто поймите как организована память и её адресация и всё встанет на свои места. А Си не проверяет выход за пределы диапазона массива, так как часто это бесполезная трата времени. Если Вы хотите это делать, то в С++ для этого есть соответствующие классы!
Остальные ответы
Лера Nyan Мастер (1929) 12 лет назад
http://pastebin.com/mmSM67ku
>g++ -Wall -x c test.c
>a.exe
5 6 72015 707
Мусор — переменные, которые не были инициализированы, содержат мусор.
Денис Евдоченко Мыслитель (8379) 12 лет назад
значит так, если mass локальная для функции, то она содержится в стеке. размер стека может быть достаточно большой (порядка 10 кб и больше) , при выходе за массив вы просто записали это число на место другой переменной, возможно, локальной для функции-родителя.
Похожие вопросы