日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈野指针

發(fā)布時間:2024/7/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈野指针 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是野指針?

??野指針并不是NULL指針,它是一個指向“垃圾”內(nèi)存的指針,也就是說指向的地址是隨機的,無法得知他的地址,操作系統(tǒng)自動對其進(jìn)行初始化。
??在計算機中,內(nèi)存的分配由操作系統(tǒng)來管理,要使用內(nèi)存需要先向操作系統(tǒng)申請,系統(tǒng)分配后才可以使用,而野指針的內(nèi)存空間是由系統(tǒng)隨機分配的,屬于非法訪問內(nèi)存。

野指針有什么危害?

??當(dāng)一個指針成為了野指針,他的指向就是隨機的,當(dāng)你使用了一個指向隨機地址的指針時,他的危害程度也是隨機的,不可預(yù)測的,它一般會造成內(nèi)存泄漏,而且很容易遭受到黑客還有病毒的攻擊,只要將病毒什么的放入這塊內(nèi)存中就可以,當(dāng)你使用這個指針的時候就就開始執(zhí)行病毒或其他程序

什么叫作內(nèi)存泄漏?

??內(nèi)存泄漏是由于疏忽或錯誤造成程序沒有及時釋放已經(jīng)不使用的內(nèi)存情況。內(nèi)存泄漏并不是物理意義上的內(nèi)存消失,而是由于程序分配了一段內(nèi)存后,并不能對這段內(nèi)存進(jìn)行控制,造成了內(nèi)存的浪費。
??簡單的說,內(nèi)存泄漏分為兩方面:

  • 非法訪問空間。
  • 訪問已經(jīng)釋放了的空間
  • 怎樣產(chǎn)生野指針?

  • 在創(chuàng)建指針時沒有對指針進(jìn)行初始化。
  • 在釋放了指針后沒有將其指向NULL。
  • 在指針變量的作用域之外使用指針
  • 如何避免野指針?

  • 養(yǎng)成良好的編碼習(xí)慣。
  • 定義指針時,要進(jìn)行初始化,如果沒有確定的值,就讓它指向NULL。因為NULL在宏定義是#define NULL (void **) 0 它代表的是零地址,零地址是不能進(jìn)行任何讀寫操作的。
  • 當(dāng)要給指針指向的空間進(jìn)行賦值時,要檢查有沒有給這個指針分配空間。方法如下:
  • int *p = malloc(sizeof(int)); //這里說明一下為什么賦值的是int整形類型的字節(jié)長度,而不是4,因為不同平臺上的整形類型的字節(jié)長度不相同, //如果要跨平臺使用會帶來不必要的麻煩,這要就很好的提高了代碼的移植性 if(p == NULL) {printf("分配失敗\n");exit(1);//跳出整個程序,return是跳出一個程序 }
  • 要將申請好的空間進(jìn)行初始化操作。因為這段空間可能會存在之前數(shù)據(jù)的殘留,會對程序造成影響??梢杂胢emset(p,0,sizeof(int))將指針指向的空間都置為0。
  • 使用完指針要及時將指針釋放,與malloc所對應(yīng)的為free(p);
  • 釋放完成后要將指針指向NULL,否則會生成野指針
  • 總結(jié)

    以上是生活随笔為你收集整理的浅谈野指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。