В любом случае доступ к границам не определен.
Так что разрешено все, что угодно.Просто «случается», что один случай падает, а другой нет.
Что касается того, почему именно первый случай не падает, а второй происходит в вашем конкретном сценарии, то первый случай в основномпросто читая массив в ненужную кучу памяти.
Но во втором случае вы получаете доступ к плохому vector
объекту.Поскольку объект vector
является просто оболочкой для указателя, разыменование этого (плохого) указателя на втором индексе приведет к сбою.