This is a concept decision.
Either the complier creates code which checks the array bounderys.
Advantage: saver code
Disadvantage: lower performance, because bounderys need do be checked at each single array access.

Or the compiler creates code which does not check.
Advantage: better performance
Disadvantage: invalid memory access
This can be a memory adress where the program is allowed to access - then something unexpected happens, often unreproducible. Or it happens that the program is not allowed to the memory adress - this causes usually the process to be killed by the operating system if the exception is not handled. Usually the exeption handler tells you "I am crashed".

C usually is optimized for high performance and expects the developer to take care about proper memory access an therefore does no boundery check for arrays.
Lite-C gives sometimes the impression of managed code with some concepts (e.g. STRING), but its also tuned for performance.