malloc не гарантирует возврат памяти с нулевым значением. Принято считать, что не только это, но и то, что содержимое памяти malloc возвращает на самом деле не -детерминированное , т.е. openssl использовал их для дополнительной случайности .
Однако, насколько я знаю, malloc построен поверх brk/sbrk , которые "возвращают" нулевую память. Я понимаю, почему содержимое того, что возвращает malloc , может быть не -0 , например. из ранее свободной памяти, но почему они должны быть не-детерминированными в "нормальном" однопоточном -программном обеспечении?
Редактировать Несколько человек ответили, объясняя, почему память может быть не -0, что я уже объяснил в вопросе выше. Я спрашиваю, почему программа, использующая содержимое того, что возвращает malloc, может быть недетерминированной -, то есть почему она может иметь разное поведение при каждом запуске (, предполагая один и тот же двоичный файл и библиотеки ). Не -детерминированное поведение не подразумевается не -0. Другими словами, :почему он может иметь разное содержимое при каждом запуске двоичного файла.