¿Cómo funcionan gratis y malloc en C?

Estoy tratando de averiguar qué sucedería si tratara de liberar un puntero "desde el medio", por ejemplo, mire el siguiente código:

char *ptr = (char*)malloc(10*sizeof(char));

for (char i=0 ; i<10 ; ++i)
{
    ptr[i] = i+10;
}
++ptr;
++ptr;
++ptr;
++ptr;
free(ptr);

Me sale un error con un mensaje de error no manejado de excepción. Quiero entender por qué y cómo funciona el trabajo gratuito para que sepa no solo cómo usarlo, sino que también pueda entender errores y excepciones extraños y depurar mejor mi código

Muchas gracias

Respuestas a la pregunta(8)

Su respuesta a la pregunta