Neither Pascal nor Ada are memory-safe.
It is like complaining a bullet vest doesn't protect against heavy machine gun bullets.
And all practical Pascal clones (e.g. Object Pascal) had to grow constructor/destructor systems to cleanup the memory on de-allocation (or they went the garbage collection route). So they were on-par with C++ for safety.
Ada is similar. It provided safety only for static allocations with bounds known at the compile-time. Their version of safe dynamic allocations basically borrowed Rust's borrow checker: https://blog.adacore.com/using-pointers-in-spark
We are beyond Ada 83, Controlled Types and SPARK exist, and Rust also does runtime bounds checking, so what.