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