Я пытаюсь понять, что происходит, когда стек/кучу переменных смешиваются в C, например:
Ничего последовательны, повторяемые или полезным. Суть Неопределенного Поведения. Она будет отличаться в зависимости от
- Каждый компилятор
- Каждая реализация STDLIB (таНос кучи менеджера)
- Каждая программа и итерация
Одна реализация таНос/бесплатно может быть умным вороха, что проверяет действительность адресов, которые вы передаете в free(), чтобы убедиться, что они находятся в действительных «аренах» или областях кучи, перед выполнением каких-либо действий. Следующая реализация malloc может сделать предположение, что указатель, который вы передали бесплатно, был прав, а также доступ или набор скрытых значений для хранения кучи в адресе относительно переданного указателя. Поскольку указатель неверен, вы, по сути, пишете весь свой стек программ и, возможно, одновременно используете организацию кучи.
Нет стандартной реализации malloc/free, поэтому существует множество возможностей.
Адрес стека - это всего лишь значение для мусора, что касается free(), и если free() предполагает, что адрес находится в области кучи, которая была разделена системой приятелей, она будет обрабатывать ваш стек как его кучевые области, не что-то хорошее, ни что-либо, что будет иметь какой-либо смысл, с точки зрения эксперимента. не
не отличается от передачи недопустимого указателя на вызов к "Fread()" или "тетср()"
'Foo()' 'установка param' не влияет на' myParam'. 'param' изначально является копией адреса' myParam'. 'free (& myParam)' плохо. – chux