c++ - *(volatile unsigned int *) 0x00 = 0x00; 的含义

标签 c++

下面这行代码是什么意思?

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

在Assert定义中使用:

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

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

    return;
}

最佳答案

我猜它试图导致程序因段错误或类似问题而崩溃。

编写代码的人都在想“我希望编译器不会优化这个崩溃,所以让我们在指针解引用前面放一个 volatile”。

但是所有代码正在做的是导致不保证崩溃的未定义行为。

std::terminate() 是一个更好的选择,如果你想让你的程序终止那么 UB Assert()

另请注意,应为断言指定条件,然后如果条件为假,则断言应触发一些失败代码。 Ot 并不意味着是一个“退出这个程序”的功能。参见 linked comment

关于c++ - *(volatile unsigned int *) 0x00 = 0x00; 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669294/

相关文章:

c++ - 使用 'using' 关键字获取指向类方法的指针

c++ - 是否可以从渲染线程强制执行主线程(GUI线程)?

c++ - boost::asio::strand post 方法性能

c++ - 重载时出现堆栈溢出 >> 为类调用运算符函数。我需要做哪些改变?

c++ - 如何将 istream * 转换为字符串或仅打印它?

c++ - Win32 上的联锁操作与 XXX::atomic

c++ - 使用线程并行化 ssh 调用的 malloc 问题

c++ - 下标运算符后缀

c++ - 如何从 char 数组中删除标点符号?

c++ - Release模式静态库比 Debug模式版本大得多