最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語言之動態(tài)內(nèi)存管理

 更新時間:2021年11月09日 15:25:40   作者:iEucliwood  
本文主要介紹了C語言動態(tài)內(nèi)存管理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

先來了解一下動態(tài)管理內(nèi)存所需用到的函數(shù)

開辟動態(tài)內(nèi)存的函數(shù)

1.malloc函數(shù)void* malloc(size_t size);

功能:開辟一塊大小為size單位為字節(jié)的動態(tài)空間。若開辟成功返回函數(shù)開辟空間的無類型指針,若開辟失敗則返回空指針NULL

2.calloc函數(shù) void* calloc(size_t num, size_t size);

功能:開辟一塊能容納下num個元素,每個元素大小為size字節(jié)的動態(tài)空間,且將每個元素的值初始化為0。若開辟成功返回函數(shù)開辟空間的無類型指針,若開辟失敗則返回空指針NULL

3.realloc函數(shù)void* realloc(void* ptr, size_t size);

功能:將指針ptr所指的動態(tài)內(nèi)存空間大小調(diào)整為size個字節(jié)。調(diào)整完成后返回原指針或新位置的指針又或是空指針

釋放開辟的動態(tài)內(nèi)存空間的函數(shù)

free函數(shù)void free(void* ptr);

功能:釋放由malloc、calloc或realloc開辟的動態(tài)內(nèi)存空間,不改變ptr的值。當(dāng)參數(shù)為空指針時不進(jìn)行操作。

錯誤信息函數(shù)

strerror函數(shù)char* strerror(int errnum);

功能:返回錯誤碼errnum對應(yīng)的錯誤信息字符串的指針。

注:錯誤碼為errno

具體使用例: 

malloc函數(shù)和calloc函數(shù)的區(qū)別就是前者開辟空間后不初始化直接返回地址,后者開辟空間后將數(shù)值都初始化為0后在返回地址,這里用malloc函數(shù)作示例

需要注意的是在使用了空間并釋放了空間后,p仍指向那塊釋放了的空間,此時需要將p指向空指針

接下來是realloc函數(shù),realloc函數(shù)在調(diào)整大小時會遇到三種情況,假設(shè)用malloc函數(shù)開辟4個字節(jié)的空間,橙色代表malloc開辟的空間,淡藍(lán)色表示已被占用的空間。

 第一種情況:開辟的空間加上后面剩余的空間 能夠 容納下調(diào)整后的空間大小,則直接在原空間后追加空間。此情況函數(shù)返回原地址,假設(shè)需要調(diào)整到六個字節(jié),空間布局如下

 

 第二種情況:開辟的空間加上后面剩余的空間 不能夠 容納下調(diào)整后的空間大小,則重新開辟一塊新的空間,并將原數(shù)據(jù)拷貝過來。然后釋放掉之前的空間。此情況函數(shù)返回新位置的地址,假設(shè)調(diào)整到9個字節(jié),空間布局如下

第三種情況: 也是malloc和calloc函數(shù)都存在的情況,堆區(qū)中沒有足夠的空間來開辟。此情況函數(shù)返回空指針

 realloc函數(shù)示例

 要注意,realloc函數(shù)使用時對于返回值一定要進(jìn)行判斷,因為返回值有可能為空指針,不要直接就賦給p否則有可能函數(shù)返回了空指針,p本來存著原地址的,然后一賦值就找不到原地址了

常見的動態(tài)內(nèi)存錯誤

1.對NULL指針的解引用操作

2.對動態(tài)開辟內(nèi)存的越界訪問

3.使用free釋放非動態(tài)開辟內(nèi)存

4.使用free釋放動態(tài)開辟內(nèi)存的一部分

5.對同一塊動態(tài)內(nèi)存的多次釋放

6.動態(tài)內(nèi)存開辟忘記釋放(內(nèi)存泄漏)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言實現(xiàn)帶頭雙向循環(huán)鏈表

    C語言實現(xiàn)帶頭雙向循環(huán)鏈表

    本文主要介紹了C語言實現(xiàn)帶頭雙向循環(huán)鏈表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 字符串的模式匹配詳解--BF算法與KMP算法

    字符串的模式匹配詳解--BF算法與KMP算法

    這篇文章記錄一下串里面的模式匹配,模式匹配,顧名思義就是給定一個被匹配的字符串,然后用一個字符串模式(模型)去匹配上面說的字符串,看后者是否在前者里面出現(xiàn)。常用的有2種算法可以實現(xiàn),下面我們來具體探討下
    2014-08-08
  • 深入理解C/C++混合編程

    深入理解C/C++混合編程

    本篇文章是對C/C++混合編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表

    c++基礎(chǔ)語法:構(gòu)造函數(shù)初始化列表

    構(gòu)造函數(shù)需要初始化的數(shù)據(jù)成員,不論是否顯示的出現(xiàn)在構(gòu)造函數(shù)的成員初始化列表中,都會在該處完成初始化,并且初始化的順序和其在聲明時的順序是一致的,與列表的先后順序無關(guān)
    2013-09-09
  • C語言循環(huán)鏈表的原理與使用操作

    C語言循環(huán)鏈表的原理與使用操作

    無論是靜態(tài)鏈表還是動態(tài)鏈表,有時在解決具體問題時,需要我們對其結(jié)構(gòu)進(jìn)行稍微地調(diào)整。比如,可以把鏈表的兩頭連接,使其成為了一個環(huán)狀鏈表,通常稱為循環(huán)鏈表
    2022-05-05
  • C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)快速排序圖文示例

    C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)快速排序圖文示例

    這篇文章主要為大家介紹了C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)快速排序圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C++標(biāo)準(zhǔn)模板庫string類的介紹與使用講解

    C++標(biāo)準(zhǔn)模板庫string類的介紹與使用講解

    今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板庫string類的介紹與使用講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • QT使用QChart繪制面積圖

    QT使用QChart繪制面積圖

    在Qt中使用QChart類可以快速繪制一個圖表出來,比如折線圖、餅圖、柱狀圖等,本文就來為大家介紹一下如何利用QChart繪制簡單的面積圖吧
    2024-11-11
  • C++實現(xiàn)第K順序統(tǒng)計量的求解方法

    C++實現(xiàn)第K順序統(tǒng)計量的求解方法

    這篇文章主要介紹了C++實現(xiàn)第K順序統(tǒng)計量的求解方法,很有借鑒價值的算法,需要的朋友可以參考下
    2014-08-08
  • C++自定義函數(shù)判斷某年某月某日是這一年中第幾天

    C++自定義函數(shù)判斷某年某月某日是這一年中第幾天

    這篇文章主要介紹了C++自定義函數(shù)判斷某年某月某日是這一年中第幾天的方法,涉及C++日期與時間操作相關(guān)技巧,需要的朋友可以參考下
    2016-06-06

最新評論

石首市| 昌宁县| 溧阳市| 元朗区| 女性| 焉耆| 环江| 威信县| 郓城县| 乌拉特前旗| 静宁县| 阿瓦提县| 郓城县| 新龙县| 新巴尔虎右旗| 磴口县| 云阳县| 石阡县| 葫芦岛市| 平安县| 长治市| 嘉定区| 邵阳县| 乌什县| 沁源县| 河间市| 神池县| 咸阳市| 兰州市| 丰宁| 寻乌县| 额尔古纳市| 共和县| 铜陵市| 沧州市| 上蔡县| 大同县| 北辰区| 武清区| 静海县| 宜宾县|