The very fact that NPE exists, in a language which doesn&#x27;t have pointers, running on a JVM that doesn&#x27;t have pointers, is evidence that the entire model of &quot;doesn&#x27;t have pointers&quot; is a sham. The reality of computer architecture is that data resides in memory, memory is an array of bytes, and bytes have addresses (i.e., pointers) and denying this fact is impossible. Even in a pure pointerless system like Java. And if there are pointers in the system, somewhere, anywhere, they are exploitable.<p>Remote code execution vulnerabilities in C are less a feature of the language syntax and mostly due to the abysmally poor C library, which is regrettably part of &quot;C The Language&quot; - but no one forces you to use it - there are better libraries. Also, it&#x27;s an artifact of implementation - just as Java&#x27;s supposed immunity is an artifact of implementation, not an inherent feature of the language syntax.<p>Case in point <a href="http:&#x2F;&#x2F;www.trendmicro.com&#x2F;vinfo&#x2F;us&#x2F;threat-encyclopedia&#x2F;vulnerability&#x2F;7033&#x2F;oracle-java-se-remote-code-execution-vulnerability-cve20152590" rel="nofollow">http:&#x2F;&#x2F;www.trendmicro.com&#x2F;vinfo&#x2F;us&#x2F;threat-encyclopedia&#x2F;vulne...</a><p>As for RCEs in C code - these would be easily avoided if the implementation used two separate stacks - one for function parameters, and one for return addresses. If user code can only overwrite passive data, stack smashing attacks would be totally ineffective. Again - there&#x27;s nothing in the C language specification that dictates or defines this particular vulnerability. It is solely an internal implementation decision.