views:

377

answers:

4

Possible duplicate
Uninitialized values being initialized?

When we create a variable and don't initialize it, then some (random) number called garbage value is assigned to it.

  • How this value is assigned to the variable?
  • What is whole concept/mechanism behind this?
  • Does this happen only in C?
+1  A: 

When we create a variable and don't initialize it, then nothing happens. When you read value from that variable you get data from memory where variable located now. It could looks like garbage/random value only because variables are placed in memory with some degree of randomness.

Kirill V. Lyadvinsky
+1  A: 

Nobody explicitly assigns a grabage value. If you create a variable, only location of the variable is determined, and not its value. Thats why we are initializing it. The garbage value might come from some previous operations over the same memory by old processes! So it can hold anything. I think it holds to pretty good number of languages. I am not sure about the list! :)

Aviator
+15  A: 

The garbage value is not assigned, rather the value is already there. When you allocate a variable you are reserving a piece of memory - until you overwrite it that memory will contain whatever "random" information was there before.

As a metaphor, think of allocating a variable like buying a piece of land - until you do something with it (like build a house) the land will just have whatever trash was already sitting there (like an old crumbling house).

Some languages will automatically fill newly allocated variables with zeros - this takes time to do. In more "do-it-yourself" languages like C this extra behavoir is not guarenteed (though on some systems memory is cleared regardless of language, for example as a security measure)

David
Ah! Well put than mine :). Great! +1
Aviator
For example, MSVC initializes everything to 0xcccccccc in debug mode (which can come quite helpful sometimes)
DrJokepu
I like the "piece of land" metaphor. +1
Ates Goral
I'm trying to think of the name of the debugger (late 90s IIRC) that used 0xf00d to fill newly allocated memory...any help?
David
+4  A: 

Memory is used and reused at various points in your application. For example, as the call stack of your application grows and shrinks the same location in memory may be overwritten many, many times. The thing to remember is that as a piece of memory is abandoned it is not zeroed out, so if you do not specify a new initial value for that place in memory when you use it again you will get the old, "garbage" value.

Some languages and structure implementations do default-initialize memory as it is used. Others do not, so it is important to read the documentation of your language carefully to know what to expect.

fbrereto