[英]Null pointer dereference not causing segfault in VS2010 windows app
[英]Why no segfault on null pointer dereference?
我已經寫了這個簡單的C代碼,
int main()
{
int *p = NULL;
if (p && *p);
//if (*p && p);
return 0;
}
當我運行這段代碼時,出乎意料的是我沒有任何段錯誤。 但是,如果我在if ()
更改p
和*p
順序(如注釋中所示),則確實會出現段錯誤。
有人可以解釋為什么嗎?
&&運算符具有短路評估。 如果僅通過查看左操作數的值即可確定結果,則不評估右操作數。 對於&&運算符,這意味着如果左側的結果為false,則不評估右側,結果為false。 換一種說法,
if (p && *p) ...
相當於
if (p) if (*p) ...
根據C11標准,第6.5.13 / 4節:
與按位二進制&運算符不同,&&運算符保證從左到右的求值; 如果對第二個操作數求值,則在第一個和第二個操作數的求值之間有一個序列點。 如果第一個操作數比較等於0,則不評估第二個操作數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.