如果指定的指針是“有效的”,有沒有辦法確定(當然是以編程方式)?檢查NULL很簡單,但像0x00001234這樣的東西呢?當試圖取消引用這種指針時,會發(fā)生異常/崩潰。首選跨平臺方法,但平臺特定(適用于Windows和Linux)也可以。更新澄清: 問題不在于陳舊/釋放/未初始化的指針; 相反,我正在實現(xiàn)一個從調(diào)用者獲取指針的API(如指向字符串的指針,文件句柄等)。調(diào)用者可以(有意或無意地)發(fā)送無效值作為指針。如何防止崩潰?
3 回答

ABOUTYOU
TA貢獻1812條經(jīng)驗 獲得超5個贊
更新澄清:問題不在于陳舊,釋放或未初始化的指針; 相反,我正在實現(xiàn)一個從調(diào)用者獲取指針的API(如指向字符串的指針,文件句柄等)。調(diào)用者可以(有意或無意地)發(fā)送無效值作為指針。如何防止崩潰?
你無法進行檢查。你根本無法檢查指針是否“有效”。你必須相信,當人們使用帶指針的函數(shù)時,那些人就會知道他們在做什么。如果他們將0x4211作為指針值傳遞給你,那么你必須相信它指向地址0x4211。如果他們“意外地”擊中一個物體,那么即使你會使用一些可怕的操作系統(tǒng)功能(IsValidPtr或其他),你仍然會陷入一個錯誤并且不會快速失敗。
開始使用空指針發(fā)信號通知這種事情并告訴你的庫的用戶,如果他們傾向于意外地傳遞無效指針,他們不應(yīng)該使用指針,嚴重:)

ITMISS
TA貢獻1871條經(jīng)驗 獲得超8個贊
防止調(diào)用者發(fā)送無效指針導(dǎo)致的崩潰是制作難以找到的靜默錯誤的好方法。
對于使用你的API的程序員來說,通過崩潰而不是隱藏它來獲取他的代碼是假的明確信息,這不是更好嗎?
- 3 回答
- 0 關(guān)注
- 742 瀏覽
添加回答
舉報
0/150
提交
取消