野指標是指隨機訪問了記憶體空間,歸根到底是由於不良的編碼習慣,有個良好的程式設計習慣是避免「野指標」的唯一方法。
如何避免野指標:
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.當空間分配完後,要檢查這個...