以下代码行的含义是什么?
*(volatile unsigned int *) 0x00 = 0x00;
用于Assert定义:
void Assert()
{
// (some other code above)
*(volatile unsigned int *) 0x00 = 0x00;
return;
}
答案 0 :(得分:6)
我猜它是试图导致程序崩溃,出现分段错误或类似情况。
编写代码的人正在思考"我希望编译器不会优化此崩溃,所以让我们在指针解引用前放置一个volatile?#34;。
但是所有代码都在做,导致未定义的行为无法保证崩溃。
如果您希望程序终止,那么std::terminate()
是一个更好的选择{U} Assert()
另请注意,应该为断言提供条件,然后如果条件为假,则断言应触发某些失败代码。 Ot并不意味着退出这个计划"功能。见linked comment
答案 1 :(得分:0)
将0x00转换为指向volatile unsigned int
的指针,然后使用运算符*
取消引用它并写入该地址0x00。哪个是未定义的行为,在大多数系统上都会导致崩溃。