首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使*(int*)NULL =1的线程崩溃;有问题吗?

使*(int*)NULL =1的线程崩溃;有问题吗?
EN

Stack Overflow用户
提问于 2012-04-14 19:29:42
回答 2查看 2.5K关注 0票数 6

我在一个多线程的c应用程序中发现了这一点。作者评论说,它用于在自定义断言函数中使线程崩溃。GCC对此没有意见,但clang发出了以下警告:

代码语言:javascript
复制
note: consider using __builtin_trap() or qualifying pointer with 'volatile'

并且每次使用assert函数时,还会发出其中的一个:

代码语言:javascript
复制
warning: indirection of non-volatile null pointer will be deleted, not trap

这里发生什么事情?__builtin_trap是否特定于clang?我应该使用它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-14 19:44:01

写入NULL地址并不能保证可靠地使您的程序崩溃,因此请使用GCC introduced __builtin_trap

看起来clang决定走得更远,完全消除这种写入,几乎迫使你使用__builtin_trap。与__builtin_trap相比,他们将NULL转换为volatile指针的另一种选择看起来并不吸引人,因为这“仅仅”是一种未定义的行为。

票数 11
EN

Stack Overflow用户

发布于 2012-04-14 19:42:29

该语句引发了未定义的行为。具体地说,编译器没有义务尝试在地址0中存储内容,并且可以对此进行优化。这就是编译器告诉你的。

使用exit()abort()或一些衍生工具来终止整个流程的执行。这是便携的。(C11有exit_Exitquick_exitabort)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10153246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档