Oh, now you're just being reasonable about a language that allows you to commit some proper code-atrocities:
char * str = (char*)malloc(1);
free((void*)(str = '\0'));
str = 'a';
This compiles and doesn't cause segfault. Believe me, I get what you are saying.
EDIT: Changed the allocated amount of space, not that it mattered to the compiler…