Содержимое памяти, выделенной с помощью malloc
(а также переменных, выделенных в стеке), не определено, поэтому вполне может быть чем угодно. Обычно вы получаете пространство, заполненное нулями (поскольку ОС очищает страницы памяти, которые использовались другими процессами) или остатками предыдущего использования этих страниц памяти (это часто бывает, если страница памяти принадлежала вашему процессу), но это что происходит под капотом, стандарт Си не дает никаких гарантий.
Таким образом, в целом нет «значения по умолчанию» и нет способа проверить, была ли изменена ваша память; однако вы можете инициализировать блоки памяти, которые вы используете, с магическими значениями, которые, как вы уверены, не будут использоваться как «реальные данные», но это будет просто внутреннее соглашение вашего приложения.
К счастью, для переменных с плавающей запятой есть несколько волшебных значений, таких как тихий NaN, которые вы можете использовать для этой цели; в общем, вы можете использовать макрос NAN
, определенный в <math.h>
, чтобы установить float
в NaN.
Кстати, вам не следует читать неинициализированные float
s и double
s, так как обычный формат, в котором они хранятся (IEEE 754), содержит некоторые магические значения (например, сигнальный NaN), которые могут вызывать арифметические исключения при их чтении, поэтому, если ваш неинициализированный память содержит такой битовый шаблон, что ваше приложение, вероятно, рухнет.
person
Matteo Italia
schedule
31.12.2010