在使用指針時需要特別注意,一不小心就會造成內存訪問越界,導致應用程序閃退。尤其是在使用多級指針的時候,更應該注意這個問題。下面以二級指針為例說明二級指針正確的使用方法,以及錯誤使用二級指針的示例。
例如:需要一個string類型的二級指針給程序使用。
1. 只為一級指針分配內存
這種方法是只為一級指針分配內存,然后將一級指針的地址賦給二級指針對象。
注意:pstrs的值是strs的地址,因此不能使用下面的方法來訪問strs數組。
這樣訪問,只有在第一次循環時能訪問到strs[0]對象,之后的pstrs[1]~pstrs[4]都是非法訪問,會造成程序異常。
2. 為每一級指針都分配內存
這種方法是為每一級指針都分配內存,具體方法如下:
strs相當於一個類型std::string*、長度為n的數組。因此,需要給每一個strs[i]分配內存,同時也要對每一級指針進行內存回收。下面的示例中沒有給一級指針分配內存就進行訪問,會產生異常。原因是此時還沒有給strs[i]分配內存,strs[i]存儲不一定是一個std::string類型的變量,所以會產生異常。
異常如下: