It's more complicated than that:
1: C uses pointer arithmetic and any pointer can end up being nil or simply show to the wrong address.
2: Just because memory is initialized, that doesn't mean a correct value is read. Some types don't have a valid zero-state (think of Rational-Numbers or Date). Which is why you need a way to express optionality and want to throw an exception if it the empty-state is accessed.