Причина работы данного массива структур?
А что не так? Тут вам не C#, чтоб на каждый чих эксепшены кидать, ибо на это тратится много драгоценных процессорных тактов, предполагается, что программист знает что делает и сам следит за тем, чтобы не получить доступ к чужой памяти. Если вы так ходите по стеку, то в принципе может ничего страшного и не случится(хотя всё равно не стоит), а вот с памятью, полученной через new, скорее всего программа упадёт.
en.cppreference.com/w/cpp/language/ub
Таков смысл «си с крестами» — «вы не платите за то, чем не пользуетесь». В данном случае: не пользуетесь авариями — не платите за них. Кстати, самый эффективный способ обработки аварий на x86 только недавно лишился патента, и я не в курсе, есть ли он в MinGW (на x64 патент обошли и он там давно был). Плюс совместимость с Си.
Правда, мне пришлось сделать свои массивы Array1d и Fix1d именно для того, чтобы проверять границы: включено в debug и выключено в release.