В C ++ можно получить доступ к памяти независимо от того, выделена она или нет.Это вызывает неопределенное поведение, но нет никакой проверки, которая говорит, является ли данная память «доступной».Это твоя проблема.Это отличается от языков на основе ВМ, где доступ к памяти проверяется для вас.
Распространенная идиома, позволяющая избежать ошибок такого рода, заключается в следующем:
delete[] myArray;
myArray = NULL; // preferably "nullptr" in C++11
Любой доступ к NULL
адрес отклонен процессором.Он предупредит ОС об ошибке (которая, вероятно, приведет к завершению вашей программы в segfault или эквивалентной ошибке).
Как упомянуто stonemetal, некоторые компиляторы / OS / allocaters проверят доступ к памяти в отладочных сборках, но выигралине делайте этого в режиме релиза для увеличения скорости.
Примечание. Если вы попытаетесь получить доступ к нераспределенной памяти в случайном порядке, вы столкнетесь с ошибками страницы, но это немного не в тему.