Страницы

Поиск по вопросам

понедельник, 11 февраля 2019 г.

Что такое висячие указатели, в чем их опасность?

Почему появляются проблемы подобного рода ?


Ответ

char* f() { char s[100]; // страшное вычисление s return s; }
Представили? вызываем char * s = f();. Нормально? вроде бы да.
Но когда мы начнем использовать этот указатель - тот char s[100]; из функции давно может быть перезаписан чем-то другим (эта память выделяется в стеке только на время работы функции). И мы получаем висячий указатель - т.е. он есть и даже куда-то указывает... Только там может быть что угодно.
Или -
s = malloc(...); .... free(s);
Значение s остается - free его не меняет, но указывает оно на память, которая освобождена, может быть выделена заново, перезаписана... или, например, еще раз удалена.
Так понятнее?

Комментариев нет:

Отправить комментарий