Есть еще подход с безопасным ручным управлением памятью.

Например, в старых "Эльбрусах" или IBM AS|400 (вот не помню уже деталей, у кого как именно).

128-бит адресное пространство позволяет выделять неповторяющиеся указатели. И при освобождении никогда уже не сможете обратиться по этому адресу и разрушить память.

Можно сымитировать и меньшем адресном пространстве, с некоторыми ухищрениями на уровне компилятора и при хранении доп. меток внутри указателя вместе с адресом.