Нет, это не весь код программы. Приведённый код компилироваться не будет, так как в программе должна присутствовать либо функция main (консольный вариант), либо функция WinMain (Win вариант).
Нет, я не придираюсь. В данном случае это важно. Следующие два куска кода имею абсолютно разную семантику:
Код: Выделить всё
int mas[10];
void main()
{
for (int i=0; i<100; i++)
{
mas[i]=i;
cout << mas[i] << " ";
}
}
Код: Выделить всё
void main()
{
int mas[10];
for (int i=0; i<100; i++)
{
mas[i]=i;
cout << mas[i] << " ";
}
}
В первом случае тебе может повезти и ты затрёшь участок памяти, в котором ничего полезного не хранится. А всё потому, что массив будет размещён в сегменте данных и ещё потому, что за объявлением массива не следует никаких других объявлений.
Во втором случае ты должен получить гарантированный краш системы (гарантированный по крайней мере для Студии). Дело в том, что твой массив будет расположен в сегменте стека, а следом за ним будет расположена системная информация: старое значение регистра EBP, а также адрес возврата из функции main, иными словами - старые значение регистров ECS и EIP. Затерев их, ты заставишь процессор перейти по системному или принадлежащему не тебе адресу, что даст краш программы.