2013-11-20 41 views
0

我的想法是打印它指向的對象。 我認爲一個有效的指針應該有一個有效的對象。 如果我們嘗試打印出對象,我們將驗證指針是否有效。 我對不對?我們可以檢查指針以確保它是有效的地址嗎?

+1

看看Raymond Chen有什麼好說的(http://blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx);即使他專門談論Windows,這應該適用於大多數操作系統。 – Praetorian

+0

[C++可能的重複是否可以確定一個指針是否指向一個有效的對象?](http://stackoverflow.com/questions/17202570/c-is-it-possible-to-determine-whether-a-指針點到有效對象) –

+0

許多重複項:[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)。 –

回答

1

我認爲一個有效的指針應該有一個有效的對象。

是的,這是有效指針的定義。

如果我們嘗試打印出對象,我們將驗證指針是否有效。

不幸的是,你不能。你可以檢查指針是否爲空;但如果它沒有被正確初始化,或者它指向的是一個已被銷燬的對象,它將既不是有效也不爲空。

如果你想要一個足夠聰明的指針來知道它是否有效,你需要一個智能指針。

+0

如果我嘗試打印它指向的內容,那麼該如何?如果它給出了隨機地址,它不再是一個有效的指針。和我想的一樣。這樣對嗎? – jsh6303

+0

@JiajuShen:我不明白你的意思。所有地址都是「隨機的」,無論該地址是否有有效的對象。沒有可靠的方法來判斷指針是否指向有效的對象。你也許可以檢測到*一些*無效的指針,不代表可訪問的地址;但是一個無效的指針可能很容易擁有一個可訪問的地址 - 無論是偶然還是因爲它曾經指向一個被刪除的對象。 –

0

你的代碼應該很聰明以跟蹤指針並避免使用未分配或未初始化的指針。有效性或無效性是代碼中的相關概念。嘗試使用智能指針。

對於裸指針,如果您不知道指針將來是否被初始化,您可以通過null初始化它們。然後在使用指針之前,可以檢查它是否爲空。

但是,這是不夠的,不規範的代碼可以有無效的指針,它的程序員會發現它們很難。例如,考慮返回一個指向本地臨時對象的指針,該對象將在退出函數後被銷燬。因此,你應該在代碼中管理它們。

 

首先儘量避免指針。如果您需要它們,請使用智能指針。如果您必須使用裸指針,請通過正確使用分配/釋放和空值來編寫格式正確的代碼和跟蹤指針。

相關問題