我的想法是打印它指向的對象。 我認爲一個有效的指針應該有一個有效的對象。 如果我們嘗試打印出對象,我們將驗證指針是否有效。 我對不對?我們可以檢查指針以確保它是有效的地址嗎?
回答
我認爲一個有效的指針應該有一個有效的對象。
是的,這是有效指針的定義。
如果我們嘗試打印出對象,我們將驗證指針是否有效。
不幸的是,你不能。你可以檢查指針是否爲空;但如果它沒有被正確初始化,或者它指向的是一個已被銷燬的對象,它將既不是有效也不爲空。
如果你想要一個足夠聰明的指針來知道它是否有效,你需要一個智能指針。
如果我嘗試打印它指向的內容,那麼該如何?如果它給出了隨機地址,它不再是一個有效的指針。和我想的一樣。這樣對嗎? – jsh6303
@JiajuShen:我不明白你的意思。所有地址都是「隨機的」,無論該地址是否有有效的對象。沒有可靠的方法來判斷指針是否指向有效的對象。你也許可以檢測到*一些*無效的指針,不代表可訪問的地址;但是一個無效的指針可能很容易擁有一個可訪問的地址 - 無論是偶然還是因爲它曾經指向一個被刪除的對象。 –
你的代碼應該很聰明以跟蹤指針並避免使用未分配或未初始化的指針。有效性或無效性是代碼中的相關概念。嘗試使用智能指針。
對於裸指針,如果您不知道指針將來是否被初始化,您可以通過null初始化它們。然後在使用指針之前,可以檢查它是否爲空。
但是,這是不夠的,不規範的代碼可以有無效的指針,它的程序員會發現它們很難。例如,考慮返回一個指向本地臨時對象的指針,該對象將在退出函數後被銷燬。因此,你應該在代碼中管理它們。
首先儘量避免指針。如果您需要它們,請使用智能指針。如果您必須使用裸指針,請通過正確使用分配/釋放和空值來編寫格式正確的代碼和跟蹤指針。
- 1. 可以在地址0分配一個有效的指針嗎?
- 2. 檢查是否有效的網址,以便我可以將它傳遞給NSURL?
- 3. 檢查地址網址以檢查它是否有端點
- 4. 我們可以用jquery檢查url的有效性嗎?
- 5. 在C中,指針的地址可以是0嗎?
- 6. 沒有地圖鍵有我可以指向的地址嗎?
- 7. 指針,我正確使用它們嗎? Objective-C的/可可
- 8. 我們可以檢查NSNotification表嗎?
- 9. 我們如何檢查電子郵件地址是否有效?
- 10. 我們可以確保本地彈性搜索呼叫嗎?
- 11. 如果另一個指針擁有相同的地址,我可以使用Valgrind或Gdb進行檢查嗎?
- 12. C#指向變量的指針 - 我可以避免它嗎?
- 13. 我們可以說指針值指定了一個對象嗎?
- 14. 檢查有效的指針
- 15. 可以使用std :: vector元素的地址作爲指針嗎?
- 16. 我可以投這樣的指針嗎?
- 17. 如何檢查以太坊地址是否有效?
- 18. 我們可以訪問C#中的指針嗎?
- 19. 我們可以在QTP中有共享的檢查點嗎?
- 20. C++刪除有效地址的指針
- 21. 爲-1有效的指針地址
- 22. 我可以測試它的數據類型的指針嗎?
- 23. Cocos2d:可以有指向父級類指針的指針嗎?
- 24. 我可以從指針地址(Linux上的C)獲取NUMA節點嗎?
- 25. 如果我們是有效的用戶,我們可以克隆存儲庫嗎?
- 26. 我可以檢查單個DataMapper屬性的有效性嗎?
- 27. 我可以在函數中有效地實現指向字符串的指針?
- 28. 我們可以動態檢查android是否支持npot嗎?
- 29. 我們可以在聯合中使用指針嗎?
- 30. 我們可以使用「this」指針獲取對象名稱嗎
看看Raymond Chen有什麼好說的(http://blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx);即使他專門談論Windows,這應該適用於大多數操作系統。 – Praetorian
[C++可能的重複是否可以確定一個指針是否指向一個有效的對象?](http://stackoverflow.com/questions/17202570/c-is-it-possible-to-determine-whether-a-指針點到有效對象) –
許多重複項:[1](http://stackoverflow.com/q/6185821/96780),[2](http://stackoverflow.com/q/482315/96780),[3](http://stackoverflow.com/q/551069/96780),[4](http://stackoverflow.com/q/17202570/96780),[5](http:// stackoverflow.com/q/4595675/96780),[6](http://stackoverflow.com/q/17202570/96780)。 –