欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C語(yǔ)言之動(dòng)態(tài)內(nèi)存管理

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

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

開(kāi)辟動(dòng)態(tài)內(nèi)存的函數(shù)

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

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

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

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

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

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

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

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

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

錯(cuò)誤信息函數(shù)

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

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

注:錯(cuò)誤碼為errno

具體使用例: 

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

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

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

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

 

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

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

 realloc函數(shù)示例

 要注意,realloc函數(shù)使用時(shí)對(duì)于返回值一定要進(jìn)行判斷,因?yàn)榉祷刂涤锌赡転榭罩羔?,不要直接就賦給p否則有可能函數(shù)返回了空指針,p本來(lái)存著原地址的,然后一賦值就找不到原地址了

常見(jiàn)的動(dòng)態(tài)內(nèi)存錯(cuò)誤

1.對(duì)NULL指針的解引用操作

2.對(duì)動(dòng)態(tài)開(kāi)辟內(nèi)存的越界訪問(wèn)

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

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

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

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

總結(jié)

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

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯)

    C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(127.詞語(yǔ)階梯),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言使用Bresenham算法生成直線(easyx圖形庫(kù))

    C語(yǔ)言使用Bresenham算法生成直線(easyx圖形庫(kù))

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言使用Bresenham算法生成直線,基于easyx圖形庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 最短時(shí)間學(xué)會(huì)基于C++實(shí)現(xiàn)DFS深度優(yōu)先搜索

    最短時(shí)間學(xué)會(huì)基于C++實(shí)現(xiàn)DFS深度優(yōu)先搜索

    常見(jiàn)使用深度優(yōu)先搜索(DFS)以及廣度優(yōu)先搜索(BFS)這兩種搜索,今天我們就來(lái)講講什么是深度優(yōu)先搜索,感興趣的可以了解一下
    2021-08-08
  • 一篇文章帶你了解C語(yǔ)言二分查找的簡(jiǎn)單應(yīng)用

    一篇文章帶你了解C語(yǔ)言二分查找的簡(jiǎn)單應(yīng)用

    這篇文章主要介紹了二分查找算法在C語(yǔ)言程序中的使用示例,文中最后提到了使用二分查找法一個(gè)需要注意的地方,需要的朋友可以參考下
    2021-08-08
  • C++詳解PIMPL指向?qū)崿F(xiàn)的指針

    C++詳解PIMPL指向?qū)崿F(xiàn)的指針

    PIMPL 是 C++ 中的一個(gè)編程技巧,意思為指向?qū)崿F(xiàn)的指針。具體操作是把類(lèi)的實(shí)現(xiàn)細(xì)節(jié)放到一個(gè)單獨(dú)的類(lèi)中,并用一個(gè)指針進(jìn)行訪問(wèn)
    2022-07-07
  • C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn)

    C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn)

    這篇文章主要介紹了C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • C++實(shí)現(xiàn)LeetCode(35.搜索插入位置)

    C++實(shí)現(xiàn)LeetCode(35.搜索插入位置)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(35.搜索插入位置),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)圖的遍歷之深度優(yōu)先搜索實(shí)例

    C語(yǔ)言實(shí)現(xiàn)圖的遍歷之深度優(yōu)先搜索實(shí)例

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)圖的遍歷之深度優(yōu)先搜索實(shí)例,采用不同的方法實(shí)現(xiàn)了深度優(yōu)先搜索算法,有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • Qt之實(shí)現(xiàn)圓形進(jìn)度條的示例代碼

    Qt之實(shí)現(xiàn)圓形進(jìn)度條的示例代碼

    在平時(shí)做頁(yè)面開(kāi)發(fā)時(shí),有些時(shí)候會(huì)用到圓形進(jìn)度條,本文主要介紹了Qt之實(shí)現(xiàn)圓形進(jìn)度條的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • OpenCV+Qt實(shí)現(xiàn)圖像處理操作

    OpenCV+Qt實(shí)現(xiàn)圖像處理操作

    這篇文章主要為大家詳細(xì)介紹了OpenCV+Qt實(shí)現(xiàn)圖像處理操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論