【发布时间】:2018-08-11 04:56:57
【问题描述】:
C 中未初始化的 char 数组的元素都具有值 'Ì'(或 -52 作为整数;0xCC 或 204 作为 char)。这是另一种类型的空字符吗?还是只是一个填充未初始化的char数组的值?
(如果有什么不同,我使用的是 Visual Studio)
【问题讨论】:
-
这是一个“垃圾”值。像任何其他人一样。未初始化的数组没有任何定义的值。
-
“魔术”垃圾值在调试构建时很有用,可帮助运行时检测到您正在访问未初始化的变量或缓冲区。但它也可能只是随机的垃圾。古老的历史:一些编译器用于零填充缓冲区和变量以进行调试构建但不发布构建,导致调试工作但发布崩溃。好玩!
-
之所以都一样,是因为 VS Debug Heap 管理器将所有未初始化的变量初始化为“designer junk”以进行损坏检测。
-
您看到了 /RTC 编译选项的副作用,该选项默认为调试版本打开。它可以帮助您检测到您正在访问未初始化的局部变量或未终止的字符串。如果程序跑了,0xcc 也很可能导致未初始化指针的访问冲突或调试器中断。用于检测缓冲区溢出。
标签: c arrays visual-studio null