指針被釋放后,是不是就變成了空指針?這是很多剛接觸指針的同學存在的誤區。
我們還是寫個代碼看下:
char *p = (char *)malloc(sizeof(char) * 128);定義一個指針,然后在堆空間申請一塊內存,這種賦值方式就表示指針指向堆空間,畫出來就是這樣的。
?
內存用完之后,還得養成釋放的習慣,如果不釋放,那這塊內存一直被占有,其他人就用不了,這就是所謂的內存泄漏。
釋放內存使用函數free,參數就是這塊內存的地址。
free(p);在圖上的表現就是,這塊內存自由了,如果后面有其他地方要使用內存,那操作系統完全可以把這塊內存再分配出去。
?
此時,指針p沒有任何的變化,它里面還是保存剛才的地址0x100,只是0x100這塊內存已經被釋放了,p并不是空指針,我們可以把它稱作懸空指針,那懸空指針能不能訪問?
char*p=(char*)malloc(sizeof(char) * 128); free(p); strcpy(p,"helloworld");如果你強行去訪問的話,就會出現一些未知的問題。
我們在學習的時候,寫的代碼通常比較少,內存使用的也不多,所以大部分情況下你去訪問已經釋放的內存好像也沒什么問題,其實這是一個誤區。
如果把它放到項目中,代碼量比較大,內存使用比較多,就會導致一系列意想不到的問題。
所以正確的做法應該是,內存釋放后,再加上一條語句:
p = NULL;把p變成空指針。
雖然空指針也不能通過 * 去訪問,但是空指針是可控的,有的時候加上一些判斷,就能有效的防止一些意外的發生。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
內存泄漏
+關注
關注
0文章
39瀏覽量
9206
原文標題:懸空指針和空指針
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
TPA6013A4SEDIFF PIN和SEMAX PIN能不能懸空?
在BTL模式下驅動揚聲器時,VOLUME引腳是控制增益的唯一引腳. SEDIFF PIN和SEMAX PIN能不能懸空?
發表于 09-29 09:10
恒生電子總裁劉曙峰:一個特別重要的挑戰就是能不能跟得上這個變化
“金融科技行業的最大風險就是跟不上變化。新技術來了,技術變革了,你能不能跟得上?你能不能跟得上業務的變化?”
諧波治理到底能不能節電
諧波治理到底能不能節電?”這是我們做電能質量行業經常會被問到的一個問題。隨著國家對節能減排項目的大力支持,有不少商業人士一擁而上加入到節能行業,想要分得節能市場的一杯羹。那么,通過諧波治理到底能不能實現節能的效果呢?
發表于 04-23 15:50
?3493次閱讀
C語言中的懸空指針和野指針是什么意思?
提起C語言大部分開發者很自然就會想到指針二字,沒錯,作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是指針中的兩個特有名詞:“懸空指針”和“野
拼接屏能不能觸屏操作?
拼接屏能不能直接觸屏操作,小編回答可以的,實際上很多客戶購買拼接屏時都會提出拼接屏能不能加觸摸的功能?我們回復是可以的,那是一種怎樣的原理呢? 拼接屏一般是用來大屏展示,用來播放文字、圖像等內容
評論