指針被釋放后,是不是就變成了空指針?有好多同學(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) 準(zhǔn)確的講,是把 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文章
481瀏覽量
70593 -
代碼
+關(guān)注
關(guān)注
30文章
4819瀏覽量
68879
原文標(biāo)題:指針被釋放后,是不是變成了空指針
文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論