C語言基礎程式(一) 野指標

2021-08-11 04:22:59 字數 1314 閱讀 4694

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

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

char *p = null;

char *str = (char *) malloc(100);

(2)指標p被free或者delete之後,沒有置為null,讓人誤以為p是個合法的指標。

別看free和delete的名字惡狠狠的(尤其是delete),它們只是把指標所指的記憶體給釋放掉,但並沒有把指標本身乾掉。

如果程式比較長,我們有時記不住p所指的記憶體是否已經被釋放,在繼續使用p之前,通常會用語句if (p != null)進行防錯處理。很遺憾,此時if語句起不到防錯作用,因為即便p不是null指標,它也不指向合法的記憶體塊。

char *p = (char *) malloc(100);

strcpy(p, 「hello」);

free(p); // p 所指的記憶體被釋放,但是p所指的位址仍然不變

…if(p != null) // 沒有起到防錯作用

(3)指標操作超越了變數的作用範圍。這種情況讓人防不勝防,示例程式如下:

class a 

}; void test(void)

p->func(); // p是「野指標」

}

總結

#define  _crt_secure_no_warnings 

#include

#include

#include

//野指標產生的原因

//指標變數和它所指向的記憶體空間變數是兩個不同的概念

// 釋放了指標所致的記憶體空間 但是指標變數本身沒有重置成null

//造成釋放的時候 通過if (p1 != null)

//避免方法: 1)定義指標的時候 初始化成null 2)釋放指標所指向的記憶體空間後,把指標重置成null。

void main11()

strcpy(p1, "11112222");

printf("p1:%s \n", p1);

if (p1 != null)

//if (p1 != null)

printf("hello...\n");

system("pause");

return ;

}

c語言野指標

1.什麼是野指標 野指標是隨機指向一塊記憶體的指標,容易造成記憶體洩露。但不一定每次都會產生段錯誤,因為可能分配到已經分配或申請過的位址。2.如何避免野指標 避免野指標需要養成一下良好的編碼習慣 1 當指標沒有指向時,給它置為空 0位址 null 因為在作業系統中,不能對0位址進行任何操作 置為空 ...

C語言野指標分析

1.野指標的概念 所謂的野指標,就是說指標指向的那塊記憶體,你沒有合法操作的許可權,也就是指標指向非法的記憶體空間,這樣的指標就叫做野指標。2.野指標產生的原因 1 指標變數未初始化 任何指標變數剛被建立時不會被自動置為null,它的預設值是隨機的,所以這塊記憶體,所以指標變數在建立時,要麼初始化讓...

C語言記憶體(野指標 )

1.堆 在鍊錶中找接近4位元組的空間,發現 5位元組接近 4位元組,將 5位元組給程式。2.靜態儲存區 編譯時就存在 儲存全域性變數和靜態區域性變數 3.野指標 1 區域性指標變數沒有初始化 struct student char name int number int main struct st...