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

c – 为什么goto的宏定义会使程序崩溃?

发布时间:2020-12-16 09:57:33 所属栏目:百科 来源:网络整理
导读:我正在读一个 post,在其中一个答案中有以下代码 #define goto { int x = *(int *)0; } goto 在那里,作者说每次一个人试图使用goto语句,他的程序都会崩溃,我的问题是为什么?根据我的理解,int x = *(int *)0;将内存地址的前4个字节中的任何内容分配给x,但为什
我正在读一个 post,在其中一个答案中有以下代码

#define goto { int x = *(int *)0; } goto

在那里,作者说每次一个人试图使用goto语句,他的程序都会崩溃,我的问题是为什么?根据我的理解,int x = *(int *)0;将内存地址的前4个字节中的任何内容分配给x,但为什么这肯定会使程序崩溃?

解决方法

只是因为您正在取消引用NULL指针.但是那个程序将崩溃的定义没有定义.它可能会崩溃,可能不会崩溃或做一些奇怪的事情.这只是一种未定义的行为,最好避免.

值得注意的是,goto并非毫无用处.每个关键词都有自己的位置,语言作者和标准委员会的成员有理由继续维护它(考虑到语言正在发生一些戏剧性的变化).如果明智地使用,goto在C和C中有一个值得的地方.

Just to give an idea how this is an UB,using VC11,I compiled the above snippet in debug and release mode. In debug mode it crashed but in release mode,compiler simply optimized out the statement and there was no crash.

(编辑:李大同)

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

    推荐文章
      热点阅读