Это происходит с локальными переменными и памятью, выделенной из кучи с помощью malloc ().Локальные переменные - более типичная ошибка.Они хранятся в стековом фрейме функции.Который создается просто путем настройки указателя стека на объем памяти, необходимый для локальных переменных.
Значения, которые эти переменные будут иметь при входе в функцию, по существу случайны, независимо от того, что произошло в тех местах памятииз предыдущего вызова функции, который использовал ту же область стека.
Это неприятный источник сложных для диагностики ошибок.Не в последнюю очередь потому, что значения на самом деле не случайны.Пока программа имеет предсказуемые шаблоны вызовов, вполне вероятно, что начальное значение повторяется хорошо.Компилятор часто имеет функцию отладки, которая позволяет ему вставлять код в преамбулу функции, которая инициализирует все локальные переменные.Значение, которое может привести к странным результатам вычислений или нарушению доступа в защищенном режиме.
Возможно, также примечательно, что управляемые среды автоматически инициализируют локальные переменные.Это сделано не для того, чтобы помочь программисту попасть в пропасть успеха, это сделано потому, что не инициализация их представляет угрозу безопасности.Это позволяет коду, который выполняется в памяти доступа к песочнице, был написан привилегированным кодом.