C++:未初始化的变量垃圾

Har*_*lem 2 c++ memory ram memory-management

int myInt;
cout << myInt; // Garbage like 429948, etc
Run Code Online (Sandbox Code Playgroud)

如果我在C++中输出和/或使用未初始化的变量,它们的假设值是多少?

  • "最后一个用户"在内存中的实际值?

例如:程序A关闭,它有一个int值1234,其值为0x1234- >我运行我的程序,myInt得到地址0x1234,我输出如上 - > 1234

  • 它只是随机垃圾吗?

Ale*_*lli 11

"随机垃圾",但强调"垃圾",而不是 "随机" - 即绝对任意垃圾,甚至没有任何"随机性"的保证 - 编译器和运行时系统被允许绝对有任何东西(某些系统可能总是给零,其他可能给出任意不同的值等,等等.


Joh*_*itb 5

它甚至不能保证是一个价值.尝试读取int,可能发生任何事情(例如发送的信号导致程序终止).在现实生活中,特别重要的是,打开一个未初始化的程序bool可能会导致你既不打true也不打false.

  • @Tyler标准表示如果没有初始化它是未定义的行为(见4.1/1).它可以包含任何位模式,包括陷阱表示. (4认同)
  • @Tyler为什么不适用于基本类型?另外,3.9.1/6并不能证实我的意思.这只是一个非规范的脚注.4.1/1证实了我所说的.@Tim,当你有未定义的行为时,任何事情都可能发生.如果int包含某个位模式,并且读取时该模式被定义为无效(未映射到整数值),则操作系统可能会终止您的程序.那里有*系统有这样的模式,称为"陷阱表示".阅读本文:http://blogs.msdn.com/oldnewthing/archive/2004/01/19/60162.aspx.请解释你的downvote. (2认同)