So can or can't it? I've had C++ programs successfully finish and return results that are bogus and even non deterministic because of memory corruption. An uninitialized pointer that accidentally points to a valid address is enough.
I've already told that memory corruption, albeit annoying, is not such a big problem. The biggest problem is complexity. Java is very susceptible to this problem because you need a thousands of classes that do nothing but the library you use (or the language itself) forces you to have them in your code.
That's one thing, the other is that Java programmers are too lazy (haven't I already mentioned that?) to do anything right. C++ folks always expect the worst. If they write a new function larger than three lines, they typically test it in thousand ways before they dare to actually use it. Java folks just move on to writing next function - if it compiles, it's done. On the other hand, they tend to write huge classes that do nothing really useful, but fulfill some stupid design pattern they don't even understand. I'm not saying that all Java programmers are like that, those who know C++ are certainly not, but advicing Java to newcomers is like letting a child to drive a real car - it's easy, you don't even have to touch the wheel, the computer does everything for you... Right?