auto
переменные (т. Е. Локальные переменные, не объявленные static
), такие как p
и temp
, остаются неинициализированными, поэтому их значение является неопределенным (по существу, любая битовая строка, оставленная в этой конкретной ячейке памяти из предыдущая операция, которая может быть или не быть допустимым значением для данного типа). Никогда не пытайтесь разыменовать неинициализированный указатель.
Переменные, объявленные в области видимости файла (вне функционального блока) или с ключевым словом static
, инициализируются следующим образом:
- указатели инициализируются в NULL;
- арифметические типы (целые числа или числа с плавающей запятой) инициализируются в 0
- структуры инициализируются рекурсивно в соответствии с двумя предыдущими правилами
- Профсоюзам инициализируется первый именованный член в соответствии с первыми двумя правилами
Если вы измените объявление p
на
static struct node *p;
тогда p
будет инициализировано в NULL. Если вы не хотите объявить p
как static
, вам придется инициализировать его как часть объявления:
struct node *p = NULL;