Если вы вызываете неопределенное поведение (как и вы), вы получаете неопределенное поведение - это означает, что разные компиляторы могут давать разные результаты на одной машине, а разные компиляторы на разных машинах могут давать разные результаты; черт возьми, один компилятор на одной машине может смотреть на фазу луны и решает делать разные вещи в зависимости от этого! И все они правильны, потому что неопределенное поведение - это то, что - undefined.
Если вы получаете бесконечный цикл, то есть вероятность, что &x[512] == &i
и когда вы пишете от нуля до x[512]
(который является неопределенное поведение), то ноль i
и цикл продолжается.
Если он падает, есть вероятность, что x[512]
совпадает с некоторой важной управляющей информацией в вызывающем стеке, и, растоптав адрес возврата или указатель кадра, вы полностью испортили систему.
Но, независимо от того, машина и компилятор работают нормально; ваш код является проблемой. Ваша петля должна быть:
while (i < 512)
x[i++] = 0;
Представьте себе, когда 'i' составляет 511. – GManNickG
, но почему не раздавить иногда? – 4pie0
'' while (i ++ <512) '' эта строка все еще взрывает мне голову. – CppLearner