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