Указатели не имеют значения по умолчанию.Значение, которое они имеют, это то, что мусор был в памяти, которую они используют сейчас.Иногда определенный компилятор обнуляет память, но это не стандартно, поэтому не рассчитывайте на это.)
Память от malloc, равная NULL, была совпадением;это могло бы быть любое другое значение так же легко.Вам нужно и всегда нужно вручную устанавливать все ваши указатели на NULL.
Другой вариант - вы также можете использовать calloc, который делает то же самое, что и malloc, но устанавливает все биты в 0 в блоке памяти, который он вам дает.,Это не помогает с переменными стека, поэтому вам все равно придется установить их в NULL самостоятельно.