@h45h47

Почему массивы в Си заполняются «М»?

В Си массивы, которые не были заполнены при объявлении, автоматически заполняются символом "M".
spoiler
619ca8af9f7a6693991319.png

Но почему именно "М", в этом есть какой-то сакральный смысл? Или это отсылка на древний мем?
spoiler
619ca8e456368682024840.jpeg


Проверено не на одном компьютере и не только мной, так что это не случайность.
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Uninitialized variables are not set to zero; they are initialized to special fill patterns, 0xcc and 0xcd (depending on whether the memory was allocated on the stack or the debug heap). The debugger can also be configured to break when uninitialized memory is read (though there are probably some restrictions on when this feature can be used)

В вашем случае 0xcc
Компилятор заполняет неициализированные переменные именно этим значением, что бы отлавливать значения которые не были инициализированы. Поэтому бывает забавно. В дебаге работает, а в релизе нет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Не заполняются они М.
Если объявляется массив автоматический на стеке без инициализатора, то просто отводится память на стеке (уменьшение/увеличение регистра счетчика стека), никаких "теневых" присваиваний элементам не происходит, элементы массива принимают те значения, которые были в этих ячейках памяти ранее.
То же самое и с динамическим массивом, только механизам выделения памяти другой.
По любому адресу в памяти всегда находится какое-то значение, даже если эта память еще не выделена, просто потому что плашка памяти уже вставлена в материнку и на нее подано питание.

Возможно в вашем случае это и не случайность - вы же не приводите код, которым выделяете память.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы