<分区>
这个小代码是UB吗?
void Test()
{
int bar;
printf("%p", &bar);
}
IMO 这不是 UB,但我想听听其他意见。
它只是打印bar
的地址,即使bar
从未被初始化。
<分区>
这个小代码是UB吗?
void Test()
{
int bar;
printf("%p", &bar);
}
IMO 这不是 UB,但我想听听其他意见。
它只是打印bar
的地址,即使bar
从未被初始化。
最佳答案
TL:DR 不,您的代码不会像您想象的那样通过使用任何未初始化的东西来调用 UB。
a(ny) 变量(自动,在本例中)的地址有一个定义值,所以不管变量本身是否被初始化,变量的地址都是一个< em>定义值。您可以利用该值。 (如果您不处理指针和进行双重解引用。:))
也就是说,严格来说,你应该写
printf("%p", (void *)&bar);
as %p
期望指向 void
和 printf()
的类型指针参数是可变参数函数,没有提升(转换)被执行。否则,这是一个明确定义的行为。
C11
,章节 §7.21.6.1
p
The argument shall be a pointer tovoid
. [.....]
关于c - 正在使用未初始化变量 UB 的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39918506/