l'allocazione di memoria ed il suo uso corretto sono responsabilità del programmatore nel linguaggio C.
è formalmente corretto ed il compilatore lo compila correttamente.codice:char *str = (char *)malloc(10); str[15]='\0';
Probabilmente 90 volte su cento non avrai neppure un errore a run-time.
Questo tipo di errori sono molto subdoli, non sai quando si possano presentare e sono quindi difficilissimi da individuare. Ti raccomando di inserire dei controlli stretti sugli input.
ciao
sergio