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