Здесь имя динамической локальной переменной
int n = 10;
...
if (n == 0)
{
... /* никогда не будет выполняться */
}
}
}
}
Здесь имя динамической локальной переменной повторно исполь-
зуется во внутреннем блоке, скрывая доступ к переменной внешнего
блока. При таком повторном использовании имен переменных нужно
соблюдать аккуратность. Сделать такую ошибку гораздо легче, чем
может вам показаться, так как большинство программистов использу-
ют в качестве имени счетчика ограниченный набор имен (i, n и
т.д.).
Неправильное использование динамических локальных переменных
-----------------------------------------------------------------
Рассмотрим пример функции:
int *divide_by_3(int n)
{
int i;
i = n / 3;
return(&i);
}
Смысл данной функции состоит в возврате указателя на резуль-
тат. Ошибка состоит в том, что к тому моменту, когда функция
возвращает управление, динамическая локальная переменная стано-
вится недействительной и будет вероятно заполнена другими данными
в стеке.
Функция возвращает неопределенное значение
-----------------------------------------------------------------
Если вы не завершаете функцию ключевым словом return, за ко-
торым следует выражение, то будет возвращаться неопределенное
значение. Например:
char *first_capital_letter(char *p)
TDeb 3.0 #2-3 = 131 =
{
while (*p)
{
if ('A' <= *p && *p <= 'Z)