Проблемы области видимости...114
Приведённый ниже фрагмент программы будет скомпилирован, но не будет корректно работать.
double* child( void )
{
double dLocalVariable ;
return &dLocalVariable ;
}
void parent( void )
{
double* pdLocal ;
pdLocal = child( ) ;
*pdLocal = 1.0 ;
}
_________________
114 стр. Часть 2. Становимся функциональными программистами
Проблема в том, что переменная dLocalVariable объявлена внутри функции child( ). Следовательно, в момент возврата адреса dLocalVariable из child( ) самой переменной уже не существует и адрес ссылается на память, которая вполне может быть занята для каких-то других целей.
«Ошибки подобного типа встречаются довольно часто, а способы их появления весьма разнообразны. К сожалению, такой тип ошибки пропускается компилятором и зачастую не вызывает аварийной остановки программы. Программа может отлично работать большую часть времени, пока память, которая в прошлом выделялась под dLocalVariable, не будет выделена другой переменной. Труднее всего найти ошибки, проявляющиеся спонтанно.»
[Атас!]
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ