加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用未初始化的变量UB的地址?

发布时间:2020-12-16 10:37:06 所属栏目:百科 来源:网络整理
导读:参见英文答案 Is it undefined behavior to take the address of an uninitialized pointer?????????????????????????????????????5个 这个小代码是UB吗? void Test(){ int bar; printf("%p",bar); } IMO不是UB,但我想要其他一些意见. 它只是打印条形图的地
参见英文答案 > Is it undefined behavior to take the address of an uninitialized pointer?????????????????????????????????????5个
这个小代码是UB吗?

void Test()
{
  int bar;
  printf("%p",&bar);  
}

IMO不是UB,但我想要其他一些意见.

它只是打印条形图的地址,即使条形图从未被初始化.

解决方法

TL:DR不,你的代码不会像你想象的那样使用任何未初始化的东西来调用UB.

(ny)变量的地址(在这种情况下是自动的)具有定义的值,因此无论变量本身是否被初始化,变量的地址都是定义的值.您可以使用该值. (如果你没有处理指针并进行双重引用.:))

那说严格来说,你应该写

printf("%p",(void *)&bar);

因为%p期望类型指针的参数为void而printf()是一个可变参数函数,所以不执行促销(转换).否则,这是一个明确定义的行为.

C11,章节§7.21.6.1

p The argument shall be a pointer to void. […..]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读