指針被釋放后,是不是就變成了空指針?有好多同學(xué)提出了這樣的問題。
借用《C專家編程》上面的一段代碼,可以很好的解釋這個問題。
#includeint main() { char *s = (char *)malloc(128); strcpy(s, "helloworld"); free(s); if (s != NULL) strcpy(s, "12345"); return 0; }
這段代碼大家看下有沒有問題,能不能順利運行?
前面三行都沒有問題,指針 s 指向了一塊堆內(nèi)存,把字符串 helloworld 拷貝到堆內(nèi)存中,然后釋放了 s。
問題就出在這,很多同學(xué)不理解,指針 s 被釋放了,是不是就變成了空指針?
如果變成了空指針,那下面的判斷就不會成立,也就不會執(zhí)行拷貝操作。
其實這樣的理解是有問題的。
指針 s 指向了堆內(nèi)存,free(s) 準確的講,是把 s 指向的內(nèi)存釋放掉,這個操作對 s 本身并沒有影響,s 里面保存的還是原來那塊內(nèi)存的地址,并不是空。
所以下面的判斷語句成立,繼續(xù)執(zhí)行拷貝操作。
由于 s 指向的內(nèi)存已經(jīng)被釋放掉,強行往里面拷貝,就會出現(xiàn)意想不到的錯誤。
養(yǎng)成良好的編程習(xí)慣就是指針被釋放掉后,手動把它變成空,空指針比野指針、懸空指針更可控。
指針是C語言的精髓,如果你還是覺得模棱兩可,不妨看下這套播放量近 20 萬的指針教程,課程以及資料全部開源,看完后一定會讓你的指針?biāo)竭_到一個更高的級別。
-
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71137 -
代碼
+關(guān)注
關(guān)注
30文章
4895瀏覽量
70548
原文標(biāo)題:指針被釋放后,是不是變成了空指針
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
函數(shù)指針的六個常見應(yīng)用場景

RTOS中的本地存儲指針使用

指針式萬用表的正確使用
指針式萬用表測量電壓技巧
指針式萬用表與數(shù)字萬用表對比
指針式萬用表功能介紹
指針式萬用表讀數(shù)技巧
指針式萬用表使用指南
指針式萬用表測量精度比較
C語言指針運算符詳解
電流計指針偏轉(zhuǎn)方向是正極還是負極
C語言指針詳細解析
面試常考+1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

評論