簡體   English   中英

*(volatile unsigned int *)的含義0x00 = 0x00;

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM