野指標及c 指標使用注意點

2021-08-25 05:22:02 字數 1961 閱讀 2841

避免野指標的產生

「野指標」的成因主要有:

1)指標變數沒有被初始化。任何指標變數剛被建立時不會自動成為null指標,它的預設值是隨機的,它會亂指一氣。所以,指標變數在建立的同時應當被初始化,要麼將指標設定為null,要麼讓它指向合法的記憶體。

char *p; //此時p為野指標
2)指標p被free或者delete之後,沒有置為null,讓人誤以為p是個合法的指標.

char *p=new char[10];  //指向堆中分配的記憶體首位址,p儲存在棧區

cin>> p;

delete p; //p重新變為野指標

3)指標操作超越了變數的作用範圍。          

char *p=new char[10]; //指向堆中分配的記憶體首位址

cin>> p;

cout<指標的注意點:

a.指標指向常量儲存區物件

char *p="abc";

此時p指向的是乙個字串常量,不能對*p的內容進行寫操作,如srtcpy(p,s)是錯誤的,因為p的內容為「abc」字串常量,該資料儲存在常量儲存區,但可以對指標p進行操作,讓其指向其他的記憶體空間。

b.資源洩漏

問題:

1 #include2 using namespace std;

3 void main()

4

結果:卡死

改進:

1 #include2 using namespace std;

3 void main()

4

結果:正確

c.記憶體越界

1 char *p=new char[3];  //分配三個字元空間,p指向該記憶體空間

2 strcpy(p,"abcd"); //將abcd存處在分配的記憶體空間中,由於strlen("abcd")=4>3,越界

3 delete p; //ok

d.返回值是指標問題:陣列p中的內容為「hello world」,儲存在棧區,函式結束時內容被清除,p變為野指標,可能導致亂碼

1 #include2 using namespace std;

3 char *f()

4 8 void main()

9 8 void main()

9 8 void main()

9 9 void main()

10

2.改變指標值:

1 #include2 using namespace std;

3 void fun(char *p)

4 7 void main()

8 7 void main()

8 {9 char *p="abc"; //p指向常量"abc"

10 fun(p);

11 cout<

結果:

注:p="ab"和strcpy(p,"ab"),含義不一樣,前者指標p指向常量「ab」儲存區域的首位址,改變了p最開始指向的new申請的記憶體空間;而後者是將「ab」分配到new申請的記憶體空間中;

野指標及c 指標使用注意點

避免野指標的產生 野指標 的成因主要有 1 指標變數沒有被初始化。任何指標變數剛被建立時不會自動成為null指標,它的預設值是隨機的,它會亂指一氣。所以,指標變數在建立的同時應當被初始化,要麼將指標設定為null,要麼讓它指向合法的記憶體。char p 此時p為野指標 2 指標p被free或者del...

c 空指標,野指標

當給空指標所指的位址賦值時,會報錯 int p nullptr p 10 int p 野指標,未初始化int p new int delete p 刪除後不知道p指向 include using namespace std class a void a func void void test voi...

C 空懸指標 野指標

指向已經被釋放的記憶體 或者 指向已經被銷毀的物件。情況一 變數c釋放,dp變成空懸指標 情況二 void func 當free或者delete呼叫時,除了釋放動態申請的記憶體,還要將相關的指標指向null,避免出現空懸指標 情況三 int func void num是基於棧的變數,當func函式返...