Что означает «двойной свободный»?
Как следует из названия, я новичок в C, и у меня скоро будет среднесрочный план. Я пересматриваю прошлые статьи в настоящее время, и повторяющаяся тема - двойная бесплатная проблема. Я понимаю, что это процесс вызоваfree()
в одной и той же ячейке памяти дважды, но у меня есть пара вопросов, на которые я не уверен на 100%, как ответить:
Вопрос 1: Каков результат двойного свободного в C, и почему это такая проблема?
Это приведет к двойному освобождению:
char* ptr = malloc(sizeof(char));
*ptr = 'a';
free(ptr);
free(ptr);
Мой ответ на это будет, будет ли он возвращать адрес памяти 0x0 и вызвать нестабильность / сбой системы. Кроме того, если я правильно помню, двойная свободная может действительно позвонитьmalloc
в два раза, что приводит к переполнению буфера, оставляя систему уязвимой.
Что было бы лучшим способом кратко подвести итог этого вопроса?
Вопрос 2: Опишите ситуацию, в которой особенно легко ввести двойное свободное в C?
Я думал, что когда вы передаете указатели вокруг вас, можете случайно освободить его в одной функции, а также освободить его снова, не осознавая?
Опять же, каков «лучший» способ подвести итог?