Что означает «двойной свободный»?

Как следует из названия, я новичок в C, и у меня скоро будет среднесрочный план. Я пересматриваю прошлые статьи в настоящее время, и повторяющаяся тема - двойная бесплатная проблема. Я понимаю, что это процесс вызоваfree() в одной и той же ячейке памяти дважды, но у меня есть пара вопросов, на которые я не уверен на 100%, как ответить:

Вопрос 1: Каков результат двойного свободного в C, и почему это такая проблема?

Это приведет к двойному освобождению:

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

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

Мой ответ на это будет, будет ли он возвращать адрес памяти 0x0 и вызвать нестабильность / сбой системы. Кроме того, если я правильно помню, двойная свободная может действительно позвонитьmalloc в два раза, что приводит к переполнению буфера, оставляя систему уязвимой.

Что было бы лучшим способом кратко подвести итог этого вопроса?

Вопрос 2: Опишите ситуацию, в которой особенно легко ввести двойное свободное в C?

Я думал, что когда вы передаете указатели вокруг вас, можете случайно освободить его в одной функции, а также освободить его снова, не осознавая?

Опять же, каков «лучший» способ подвести итог?

Ответы на вопрос(4)

Ваш ответ на вопрос