一、什么是未定義行為?
????????未定義行為(Undefined Behavior)是指C語言標準未做規定的行為。同時,標準也從沒要求編譯器判斷未定義行為,所以這些行為有編譯器自行處理,在不同的編譯器可能會產生不同的結果,又或者如果程序調用未定義的行為,可能會成功編譯,甚至一開始運行時沒有錯誤,只會在另一個系統上,甚至是在另一個日期運行失敗。當一個未定義行為的實例發生時,正如語言標準所說,“什么事情都可能發生”,也許什么都沒有發生。
????????一句話,未定義行為就是運行結果不確定,可能運行成功,可能失敗,可能結果不同
二、未定義行為的例子
大家只要正確的寫代碼就行,別搞這些未定義的行為。
1. 指針的未定義行為:
解引用空指針 |
解引用沒被初始化的指針(野指針) |
使用指向生命周期已結束的對象的指針 |
指針的越界訪問 |
2. 其他未定義行為
有符號的整數的算數溢出 |
數組越界訪問 |
訪問未初始化的變量 |
對字符串常量進行修改 |
對于有返回值的函數,不返回返回值 |
變量同時是左值和右操作數 |
輸出語句中的無順序打印(這里特指此類printf( "%d %d" ,++i , --i );) |
參考博客:洛谷日報:關于 C++ 未定義行為的一些事 - 知乎