C/C++ 下如何判斷空指針

今天在寫C++代碼,遇到一個很奇怪的問題,在Android JNI下判斷一個指針是否爲空,但是發現 (NULL == ptr )或者 (nullptr== ptr )表達式均爲真,然而ptr是剛new出來的,也有地址值。

這就很讓人費解了,不信邪,寫了這麼多年的代碼了,這種代碼怎麼看怎麼沒問題,同樣的代碼到x86環境下跑一次,卻得到了我想要的結果,真是讓人凌亂啊。。。


最後只能祭出了我不太習慣的寫法 (!ptr),這樣就沒問題了。


通過血的教訓總結一下,如果要判斷一個指針是否爲空,不要使用(NULL == ptr )或者 (nullptr== ptr )這種寫法,在不同的平臺上可能有不同的結果。建議使用(!ptr)或(ptr) 之類的寫法,這種寫法在多數平臺上都沒歧義,只有一個統一的結果。 從此可以總結出,在不同的平臺上,NULL可能會被定義爲其他地址,當然這個地址都是非法不可訪問的。此問題同樣適用於C。

雖然前種方法可讀性比較高,但是在某些平臺上真會把你坑的不要不要的,一切爲了可移植性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章