Страницы

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

пятница, 3 января 2020 г.

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

#cpp #c #указатели


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


Ответы

Ответ 1



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

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

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