2014-12-21 3 views
0

В языке C, когда мы объявляем переменную как int, она присваивает пространство в памяти и сохраняет значение мусора. пока мы не дать ввод ..Значение по умолчанию для char?

Подобным же образом, что символ будет храниться в качестве значения по умолчанию ..

Когда я использую отладки функции в коде блоков. Он присвоит что-то вроде 0 '\ 000'. Есть ли смысл для этого представления.

Заранее спасибо

+0

Похоже на десятичное значение, а также на синтаксис восьмеричного выхода для символа (оба значения 0). – eckes

+0

С MSVC при компиляции в режиме отладки определенные значения заполнения будут использоваться для неинициализированной памяти в зависимости от того, как выделена или освобождена память: http://stackoverflow.com/questions/370195/when-and-why-will-an-os -initialise-memory-to-0xcd-0xdd-etc-on-malloc-free-new Это может очень помочь при отладке проблем, связанных с инициализацией или временем жизни объекта. –

ответ

4

Значение мусора может быть любой комбинацией из 8 битов, 0000 0000 к 1111 1111. Нет «стандартной стоимости мусора», это все, что было в этой области памяти, до того, как оно было передано вместе с вашей переменной.

+2

В частности, нет гарантии, что он всегда будет равен нулю, даже если он обычно оказывается таким, когда вы запускаете его в отладчике. – Wyzard

+0

На самом деле я довольно редко получаю нулевые инициализированные локальные переменные. Я не знаю, я мог бы быть большим пользователем ОЗУ. – Jite

+0

Ядро ОС обычно имеет нулевые страницы памяти, когда они сначала назначаются процессу, поэтому он не может читать (возможно, частные) данные, оставленные другим процессом. Таким образом, * первый раз, когда ваша программа использует определенную страницу своего адресного пространства, скорее всего (но не гарантируется) будет равна нулю. – Wyzard

1

Не существует значения по умолчанию для мусора, оно просто будет иметь то же значение, что и последний байт памяти. Однако, если вы выделите свою переменную с помощью функции calloc, она установит выделенную часть памяти в ноль.