¿Qué significa "doble libre"?

Como sugiere el título, soy nuevo en C y tengo un mediano plazo próximamente. Actualmente estoy revisando trabajos anteriores y un tema recurrente es el doble problema gratuito. Entiendo que es el proceso de llamar.free() en la misma ubicación de memoria dos veces, pero tengo un par de preguntas que no estoy 100% seguro de cómo responder:

Pregunta 1: ¿Cuál es el resultado de un doble gratis en C y por qué es un problema así?

Esto provocará un doble libre:

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

*ptr = 'a';
free(ptr);
free(ptr);

Mi respuesta a esto sería, devolvería una dirección de memoria 0x0 y causaría una inestabilidad / caída del sistema. También si recuerdo correctamente, un doble gratis puede en realidad llamarmalloc dos veces, lo que resulta en un desbordamiento de búfer dejando el sistema vulnerable.

¿Cuál sería la mejor manera de resumir brevemente esta pregunta?

Pregunta 2: Describa una situación en la que es particularmente fácil introducir un doble gratis en C?

Estaba pensando que cuando los punteros que pasan a tu alrededor pueden liberarlo accidentalmente en una función, ¿y también liberarlo de nuevo sin darme cuenta?

Una vez más, ¿cuál es la "mejor" manera de resumir esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta