未初始化变量的值从何而来?
Where do values from unintialized variables come from?
当你声明一个局部变量时,我喜欢这样:
int i;
并且你使用这个变量,你会得到未定义的行为,因为我还没有初始化。但是我持有一个值,一个"garbage"值,这个值是从哪里来的呢?它来自内存中的随机位置吗?
它是之前在 &i 内存中的任何内容。
你不知道,你也说不出来。未定义的行为意味着任何事情都可能发生。
也就是说,在大多数实现中,大多数时候 int i;
会在堆栈上保留 sizeof(int)
字节(通常在 某处 主内存),因此 i
的值将是此时恰好在堆栈上的任何值。
但不要依赖它,记住这并不总是正确的。
当你声明一个局部变量时,我喜欢这样:
int i;
并且你使用这个变量,你会得到未定义的行为,因为我还没有初始化。但是我持有一个值,一个"garbage"值,这个值是从哪里来的呢?它来自内存中的随机位置吗?
它是之前在 &i 内存中的任何内容。
你不知道,你也说不出来。未定义的行为意味着任何事情都可能发生。
也就是说,在大多数实现中,大多数时候 int i;
会在堆栈上保留 sizeof(int)
字节(通常在 某处 主内存),因此 i
的值将是此时恰好在堆栈上的任何值。
但不要依赖它,记住这并不总是正确的。