如何避免野指標?

2021-07-15 05:21:16 字數 1247 閱讀 5703

野指標是指隨機訪問了記憶體空間,歸根到底是由於不良的編碼習慣,有個良好的程式設計習慣是避免「野指標」的唯一方法。

如何避免野指標:

1)初始化:

char*p = null;(

為何賦值為

null

:一是null

是乙個巨集,高亮,檢查段錯誤的時候比較顯眼。二是

null

為值,不能對

null

值賦值或者訪問。)

2)對指標賦值時,先檢查是否分配記憶體,如果沒有分配空間,用

malloc

分配記憶體。

如:char  *ptr

ptr =  (char *)malloc(sizeof(char)*100);

3)malloc的返回值為

void *

,因為為

char

型指標,所以

malloc

要強制轉換為

char *

型。雖然已經使用了

malloc

,但是也有沒有分配成功的情況,要通過if(

null == ptr

)來判斷是否分配成功。

分配好記憶體之後,但是也不排除會分配乙個剛配釋放的記憶體,所以需要清空緩衝區,通過memset

函式或者

bzero

函式來清空。

memset:

memset(ptr,0,sizeof(ptr)),這個用法是錯的,

ptr是指標,

sizeof(ptr)為4

個位元組,而我們

ptr該中往往不止

4個位元組。

所以應該為(ptr , 0 , sizeof(ptr) * 100)

;這個是指

ptr所指向的記憶體區中前

n個位元組用

0位元組填空。

bzero:

bzero(ptr,sizeof(char) * 100);

這是說從

ptr開始的

100個位元組全部置為0。

memset與

bzero

的不同之處在於:

memset可以用各種不同的值來填充,而

bzero

只能用0

來填充。

4)清空完快取之後就可以對這個指標賦值了

5)用完之後用free(ptr)

來釋放記憶體,同時還要對

ptr賦

null

,即ptr = null

野指標如何避免

先看一段 struct student stu,pstu int main void 這是很多人都容易犯的錯誤 定義了結構體變數stu,但結構體內部的char name在定義結構體時只是為其分配了4位元組的記憶體,沒有指向乙個合法的位址,這時其指標指向的區域只是一些亂碼,有事還沒有訪問許可權。這就是...

什麼是野指標?如何避免野指標?

野指標不是 null指標,它是隨即指向一塊記憶體的指標。野指標是很危險的,會導致記憶體洩漏,if語句對它不起作用。導致野指標的原因有兩種 1 野指標指向了一塊沒有訪問許可權的記憶體。即指標沒有初始化 2 野指標指向了乙個已經釋放的記憶體。因為野指標是因為我們的不良程式設計習慣造成的,所以我們養成良好...

什麼是野指標?野指標的危害?如何避免野指標?

什麼是野指標?野指標是指隨機指向一塊記憶體的指標 野指標的危害?如何避免野指標?我們要在以後養成良好的編碼習慣 1.將沒有指向的指標初始化指向null 指向null的指標不能對他的指向進行修改 2.當想給乙個指標指向的空間賦值時,一定要給這個指標分配空間 malloc 3.當空間分配完後,要檢查這個...