Это скорее недостаток чем достоинство. При чем не всегда программа не завершается аварийно, а только тогда, когда вы не вышли за пределы кучи. Если же обращение к массиву будет далеко за пределами самого массива то винда или другая ОС выкинет ошибку типа программа попыталась записать (прочитать) данные по такому то адресу и была "отослана нахрен" завершена. Плюсы - это если у вас есть два разных массива идущих друг за другом и имеющих идентичные данные. И вы пробежавшись по первому массиву бежите по следующему с одной и той же задачей. Не безопасно. Нужно понимать как храняться данные. Компилятор может выровнять следующий массив по адресу кратному 16 и даже если предыдущий массив занимал только 12 байт часть памяти может оставить пустой в угоду производительности. Отсюда вывод что такой подход к программированию не может и не должен присутствовать в жизни. Иначе ракеты будут не космос бороздить, а на землю падать. И нужно понимать что программисты зачастую пытаются написать понятный код, так как 80% рабочего времени это не написание кода, а его чтение и чем понятней человек напишет, тем проще потом будет его читать. А такой подход может запутать программиста и тот может посчитать ошибкой что обращаются к индексу находящемуся за пределами массива.