在 C++/C 中,如果我们不初始化一个变量,它会有一些垃圾值,对吧?我想知道这些值是从哪里来的?它是由编译器分配的吗?这个值有范围吗?它是分配给该变量的内存中存在的先前值吗?如果是,5 或 500 可以是垃圾值吗?
这不是为了任何编码目的,我只是为了学习而了解它。
Any value can be garbage. It's whatever was left over in that spot of memory from the last operation that occurred there. It is unpredictable and never reliable, but it could be 5 or 500.
它可以是之前内存位置中的任何值。它可能是一个神奇的值,例如 0xCD,由调试器放置在那里。它可以由编译器为您设置为 0。它可能是对该类型不合法的值(例如,不等于任何枚举值)。
假设编译器没有做任何特别的事情(如果你正在做一个调试版本,它可能会发生),这将是当时内存中发生的任何事情。
它不能被依赖。
你得到了已经存在的价值。所以是的,这很可能是“5”。
注意:如果您在 DEBUG 模式下运行,环境通常会将内存归零,这是获得我们称为“ Heisenbugs ”的怪异行为的一种方法 :-)
没有分配垃圾值,而是该值已经存在。当您分配一个变量时,您正在保留一块内存 - 直到您覆盖它,该内存将包含之前存在的任何“随机”信息。检查这个有答案的链接