有些C和C 開發者故意在解除了某個指標引用的記憶體的分配之後,把該指標設為NULL 這為什麼是個好主意

時間 2021-06-25 14:47:02

1樓:不露臉的執行者

在大多數c和c++實現中,沒有檢查指標實際上是否指向有效記憶體的途徑.一中常見的錯誤就是:解除了某個記憶體塊的分配,隨後又在程式中引用該記憶體.

此時,該指標所指向的記憶體和可能已重新分配用於其他目的.通過把指標設定為null,程式設計師希望能預防這些有害的引用--在大多數情況下,解除null指標的引用將生成執行時的錯誤.

2樓:

是一個規範問題,不那麼做不會直接導致什麼後果,但是有潛在的弊端。程式設計師寫程式時,難免會有些錯誤,而且自己有時候很難覺察到。否則就不會出錯了。

而且更有些時候,他們心裡想的是沒錯的,只是打錯了。

比如if(i==1);打成了if(i=1);這樣的錯誤是可以編譯過去的,它和i=1; if(i);是沒什麼區別的。

但是如果他養成了使用if(1==i);這樣的程式設計習慣,這種錯誤肯定沒法出現。因為如果寫成1=i是編譯不過去的,給常量賦值了。

你說的問題和這個類似,如果能保證對對銷燬的指標百分之百的正確使用,那麼不給它賦null絕對沒問題。關鍵就是有時候還是有可能錯誤使用的。

指標設為null一方面可以減少這樣的錯誤,另一方面,真正有錯誤時,也方便定位錯誤。

3樓:匿名使用者

我們知道c是比較自由的語言,指標指向的記憶體雖然被清空,沒有設定為null的情況下,指標仍然可用,且可以指向程式記憶體空間的任意地址。程式邏輯上稍有疏忽即可導致修改不該修改的記憶體。

如果清空指標指向的記憶體後,立刻將其設為null,之後針對該指標的分配、呼叫、修改都會引發一個錯誤訊息。

個人認為 delphi 在這方面做的就比較優美,ddelphi呼叫free的時候並不直接呼叫free,而是嘗試首先free,緊跟著設定nil(delphi中的nil等同於c中的null),還有一個專門的函式:freeandnil()

4樓:匿名使用者

這種情況就是大家經常說的野指標問題,為什麼會出現野指標,回答者: chenyayuzx - 經理 五級 這個人已經回答的很完善了,並且,如果你的程式不想出現莫名其妙的錯誤或者正在執行時,突然非法關閉,並且問題不是同樣的,那就表示可能有也指標出現,也指標的查詢也是一個非常痛苦的體力活,所以最好是還是按照標準來寫,釋放完成後,最好把它置成空的。可以有效的防止野指標的數量和形成。

5樓:匿名使用者

因為要是指標沒有把該指標進行指空的話,有可能指標就會指向一個隨即地址,##這是個非常危險的情況,因為隨機地址可能是一個會指向系統或是其他關鍵地方,而修改這些地方可能導致系統的問題。

6樓:

野指標null一可以減少這樣的錯誤

怎樣關閉華為開發者模式,怎樣關閉開發者模式?

開啟手機設定,找到 系統和更新 開啟 開發人員選項 將 開發人員選項 右邊按鈕關閉即可 要再次開啟,可以在設定介面找到 關於手機 連續點選 版本號 七到八次,再輸入鎖屏密碼即可開啟。提升手機效能 1 如果在使用手機過程中感覺切換頁面存在卡頓情況,可以通過華為手機開發者模式,調整 視窗動畫縮放 功能。...

linu的開發者是誰,linux 的開發者是誰?

linux官方 www.kernel.org 絕大多數基於linux核心的的作業系統使用了大量的gnu軟體,包括了shell程式 工具 程式庫 編譯器及工具,還有許多其他程式,例如emacs。正因為如此,gnu計劃的開創者理查德 馬修 斯托曼博士提議將linux作業系統改名為gnu linux。但有...

OPPOr9怎麼關閉開發者模式 不是開發者選項 ?

開啟手機的設定,可以檢視到開發者選項的存在,點選設定選單裡面的應用。找到設定,點進去。在全部裡找到下面的 清除資料 選項,點選清除資料,在跳出的提示對話方塊裡面點選確定,之後介面直接跳到桌面,表示已經清除了設定的資料,再開啟設定裡,發現開發者選項已經消失了。此方法的原理是,將設定選單還原為預設初始值...