Obviously, pointer arithmetic is a very powerful tool to have in your programming toolkit. However, as we have seen, some security risks are involved. These security issues were deemed significant enough that the designers of Java and .NET decided that the benefits didn't outweigh the risks, and they excluded pointer arithmetic (along with other features such as multiple inheritance and operator overloading) from their language specifications.
In this case, security concerns were tackled directly at the language level, rather than leaving the programmer to decide. Don't take this point lightly. Java and .NET programmers don't have the ability to use features such as pointer arithmetic, multiple inheritance, and operator overloading. These decisions were removed from the hands of the programmers and instead made by the language designers.
Ultimately, these decisions were made with the intention of producing more robust code. They were also influenced by implementation issues such as compiler construction, garbage collection, and so on. Regardless of the motivations, I find it fascinating to explore how pointer arithmetic can be utilized—if not why these features were banished.