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