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