Указатели указывают на некоторую область памяти. Любая область памяти. Программы получают свою память из операционной системы, которая обычно выделяет ее большими кусками («страницами»), которые затем разделяет среда выполнения программы. Это делают подпрограммы, которые вызываются malloc, new и free, delete, а также механизмы вызова и возврата из подпрограмм.
Попытка использовать место в памяти, которое не было выделено программе, приводит кОшибка сегментации. Но использование памяти, выделенной для программы, не приводит к ошибкам.
Программы обычно не возвращают страницы, которые были им выделены. Вместо этого память просто используется повторно, например, для хранения различных переменных. Это оптимизация, поскольку операционная система требует больших усилий для выделения памяти. Это также уменьшает объем кэша, который использует программа.
Именно поэтому так называемый «висячий указатель» так опасен. Когда вы используете его, он возвращает данные. Только тщательная проверка покажет, что данные не имеют смысла. Он может даже возвращать правильные данные в течение длительного времени, пока область памяти не будет перезаписана и перезаписана чем-то другим. Тогда ваша программа вдруг показывает «неопределенное поведение» ...