[英]Meaning of *(volatile unsigned int *) 0x00 = 0x00;
以下代码行的含义是什么?
*(volatile unsigned int *) 0x00 = 0x00;
在断言定义中使用:
void Assert()
{
// (some other code above)
*(volatile unsigned int *) 0x00 = 0x00;
return;
}
我可以猜测它正在试图导致程序因分段错误或类似原因而崩溃。
编写该代码的人都在想:“我希望编译器不会优化崩溃,所以让我们在指针取消引用之前放置一个volatile”。
但是所有代码正在做的事情会导致无法保证的崩溃行为。
如果您希望程序终止,那么std::terminate()
是一个更好的选择,那么UB Assert()
还要注意,应该给断言一个条件,然后,如果条件为假,则该断言应该触发一些失败代码。 Ot并非要成为“退出此程序”功能。 查看链接的评论
将0x00强制转换为指向volatile unsigned int
指针,然后用运算符*
取消引用,然后写入该地址0x00。 这是未定义的行为,并且在大多数系统上会导致崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.