麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

C語言free函數(shù)的原理

2023-06-09 12:08:04
字體:
供稿:網(wǎng)友

如果malloc 了一塊字符串的內(nèi)存,然后,它改變了這個字符串的大小,問會不會有一部分內(nèi)存沒有被釋放掉。當(dāng)然,肯定會釋放掉的,但是一直沒有了解過free 的原理,不敢亂說。我看了一下操作系統(tǒng)的內(nèi)存管理,基本上是這樣的,當(dāng)然各個系統(tǒng)的實現(xiàn)不一樣。

操作系統(tǒng)管理內(nèi)存,維護(hù)了一個空閑內(nèi)存鏈表,malloc從個鏈表中選出一個來使用,每個內(nèi)存塊都有一個頭部來表示這個內(nèi)存的基本信息,如內(nèi)存大小,所以free 時候 能夠記住原來指針?biāo)傅膬?nèi)存大小,而不是用內(nèi)存塊中是否有 /0 來臨時計算指向內(nèi)存的大小,不要字符串的計算長度的方法所誤導(dǎo)。

還有一點要注意的就是,系統(tǒng)在free 內(nèi)存的時候,記住的只是malloc 時候的地址,和分配內(nèi)存的大小。

比如 char *p = (char *)malloc(10); 就會產(chǎn)生分配10個字節(jié)。如果 你把指針的地址改變了 p = p + 1;  然后 free 就要出問題了。程序會崩潰。

如果一定要改變指針的值,建議這樣做 char *newp = p; 然后 改變 newp = newp + 1 , 最后 free(p);

還有一點要注意,一個長度 為10 的字符串要占用 11個字節(jié)。因為還有一個 '/0', 所以分配內(nèi)存的時候要分配 lenght + 1 的大小。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成年性羞羞视频免费观看无限 | 日本免费aaa观看 | 电影av在线 | 久久99国产伦子精品免费 | avav在线播放 | 国产精品久久久久久久久久妇女 | 久久99精品久久久久久青青日本 | 亚洲免费看片网站 | 视频一区国产精品 | 一级黄色毛片播放 | 国产免费一区二区三区在线能观看 | 免费一区二区三区 | 污黄视频在线播放 | 意大利av在线 | 99精品视频网站 | 亚洲国产综合在线观看 | 二区国产| 第四色成人网 | 一本色道久久99精品综合蜜臀 | 久久久亚洲欧美综合 | 国产一区在线视频观看 | 国产一级在线免费观看 | 黄色片网站免费 | 国产精品一区二区三区在线 | 精品一区二区久久久久久按摩 | 欧美日韩在线免费观看 | 欧美性黄 | 中文日产幕无线码6区免费版 | 国产精品一区视频 | 国内久久久久 | 最近中文字幕一区二区 | 免费啪视频在线观看 | 天堂在线中文资源 | 国产精品hd免费观看 | 国产亚洲精品久久久久久久软件 | 欧美黄色大片免费观看 | 神秘电影91| 亚洲啊v在线观看 | 久久免费视频一区二区三区 | 精品国内视频 | 激情黄页 |