То, что происходит, не определено Стандартом. Что касается C++, адрес недействителен и не должен использоваться. Что произойдет, если вы все равно его используете, никто не знает.
На практике эта память обычно находится там до тех пор, пока она не понадобится кому-то еще. Все, что вы сделали, это сказали: «Мне это больше не нужно». Вы все еще можете получить к нему доступ некоторое время спустя, что приведет к очень плохим предположениям о пригодности вашего кода, но его можно вернуть и переназначить в любое время.
Если процессу нужна память для чего-то другого, возможно, он получит то, на что указал data
. В этом случае использование data
может привести к повреждению памяти, используемой другой частью вашей программы. Это действительно плохая сцена, потому что трудно отследить, что на самом деле произошло, когда что-то, совершенно не связанное с ошибкой, приводит к сбою программы.
Если другому процессу требуется память, возможно, базовая система забирает память и передает ее другому процессу. На современном ПК доступ к data
после того, как память была передана другому процессу, будет фатальным.
person
user4581301
schedule
13.02.2019
new
/malloc()
/etc. Небезопасно читать или записывать эту память после вызова удаления (как потому, что какой-то другой поток может уже повторно использовать ее, так и более формально, потому что это вызывает неопределенное поведение, что означает, что компилятор может предположить, что вы никогда этого не сделаете, и, следовательно, может с радостью позволить происходить странным/неприятным/таинственным вещам, если вы это сделаете) - person Jeremy Friesner   schedule 13.02.2019