Почему нет ругани на модификацию стороннего куска памяти?
Запись по невалидному указателю - это UB (undefined behavior), т.е. по стандарту произойти может что угодно. На деле просто пишется туда, куда сказали, что может вызвать как структурное исключение (SEH, не путать с обычными исключениями C++) на Windows или SIGSEGV на Unix'ах, а может и не вызвать, если по данному указателю запись возможна. Т.о. try-catch не решение по двум причинам:
1. Исключение даже если и будет, то не C++ (хотя, к примеру, студия позволяет SEH'и ловить "обычным" catch)
2. Исключение не гарантировано
Проверять, что память доступна для записи в общем случае бессмысленно, так как она вполне может быть доступна, но по адресу лежит не массив, а какие-то другие данные, которые тем не менее можно перезаписать, поломав программу. Решение заключается в том, чтобы не писать туда, куда не нужно, т.е. сводить к минимуму манипулирование голыми указателями без должной осторожности и понимания.
Проверка происходит грубо говоря на уровне ОС. Например, XP и win7 в случае записи за предел массива реагируют по разному - семерка чаще всего крешит приложение, семерка - отработает.
Вообще проверка а указывает ли указатель куда надо всегда на совести программиста. Причем может вполне валидным быть наращивание указателя за пределы первого массива - например если вы гарантируете что за первым массивом сразу идет второй массив.