淺談指標使用中注意事項

來源:互聯網
上載者:User

相信大家對指標的用法已經很熟了,這裡也不多說些定義性的東西了,只說一下指標使用中的注意事項吧。

一.在定義指標的時候注意連續聲明多個指標時容易犯的錯誤,例如int * a,b;這種聲明是聲明了一個指向int類型變數的指標a和一個int型的變數b,這時候要清醒的記著,而不要混淆成是聲明了兩個int型指標。

二.要避免使用未初始化的指標。很多執行階段錯誤都是由未初始化的指標導致的,而且這種錯誤又不能被編譯器檢查所以很難被發現。這時的解決辦法就是盡量在使用指標的時候定義它,如果早定義的化一定要記得初始化,當然初始化時可以直接使用cstdlib中定義的NULL也可以直接賦值為0,這是很好的編程習慣。

三.指標賦值時一定要保證類型匹配,由於指標類型確定指標所指向對象的類型,因此初始化或賦值時必須保證類型匹配,這樣才能在指標上執行相應的操作。

四.void * 類型的指標,其實這種形式只是記錄了一個地址罷了,如上所說,由於不知道所指向的資料類型是什麼所以不能進行相應的操作。其實void * 指標僅僅支援幾種有限的操作:1.與另外的指標進行比較,因為void *類型裡面就是存的一個地址,所以這點很好理解;2.向函數傳遞void *指標或從函數返回void
*指標,舉個例子吧,我們平時常用的庫函數qsort中的比較函數cmp(個人習慣於用這個名字)中傳遞的兩個參數就是const void *類型的,用過的應該很熟了;3.給另一個void * 類型的指標賦值。還是強調一下不能使用void * 指標操縱它所指向的對象。

五.不要將兩個指標變數指向同一塊動態記憶體。這個容易引起很嚴重的問題。如果將兩個指標變數指向同一塊動態記憶體,而其中一個生命期結束釋放了該動態記憶體,這個時候就會出現問題,另一個指標所指向的地址雖然被釋放了但該指標並不等於NULL,這就是所謂的懸垂指標錯誤,這種錯誤很難被察覺,而且非常嚴重,因為這時該指標的值是隨機的,可能指向一個系統記憶體而導致程式崩潰。但也就是因為值是隨機的,所以運行程式時有時正常有時崩潰,這一點要特別注意。


六.在動態delete釋放一個指標所指向的記憶體後注意將該指標置空。


七.在為一個指標再次分配記憶體之前一定要保證它原先沒有指向其他記憶體,防止出現記憶體流失。解決的辦法是我們必須判斷該指標是否為空白,這時候就顯示出第六條的優勢,因為如果釋放某記憶體後相應指標不置空的話就不能為其分配新記憶體了。所以第六條很有必要。


八.雖然程式在退出main函數時會釋放所有記憶體空間,但對於大型程式最好還是某塊記憶體不用了立刻釋放,而不要指望系統最後的回收,因為記憶體流失會慢慢消耗系統資源直到記憶體不足而程式死掉。


九.在用new動態分配完記憶體之後一定要判斷是否分配成功,分配成功後才能使用。


最後提醒兩條:任何指標聲明後一定要初始化;任何指標用free或delete釋放之後一定要置空。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.