含义*(volatile unsigned int *)0x00 = 0x00;

时间:2017-06-21 07:19:50

标签: c++

以下代码行的含义是什么?

*(volatile unsigned int *) 0x00 = 0x00;

用于Assert定义:

void Assert()
{
    // (some other code above)

    *(volatile unsigned int *) 0x00 = 0x00;

    return;
}

2 个答案:

答案 0 :(得分:6)

我猜它是试图导致程序崩溃,出现分段错误或类似情况。

编写代码的人正在思考"我希望编译器不会优化此崩溃,所以让我们在指针解引用前放置一个volatile?#34;。

但是所有代码都在做,导致未定义的行为无法保证崩溃。

如果您希望程序终止,那么std::terminate()是一个更好的选择{U} Assert()

另请注意,应该为断言提供条件,然后如果条件为假,则断言应触发某些失败代码。 Ot并不意味着退出这个计划"功能。见linked comment

答案 1 :(得分:0)

将0x00转换为指向volatile unsigned int的指针,然后使用运算符*取消引用它并写入该地址0x00。哪个是未定义的行为,在大多数系统上都会导致崩溃。