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

C語言動態(tài)內(nèi)存函數(shù)詳解

 更新時間:2021年09月23日 15:38:01   作者:LCW0102  
這篇文章主要介紹了C語言動態(tài)內(nèi)存函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

動態(tài)開辟空間的原因

靜態(tài)開辟空間是固定的,數(shù)組在申明的時候必須指定數(shù)組的長度,在編譯的時候分配內(nèi)存,但是我們在實際情況中對于內(nèi)存空間的需求,不僅僅是上述的情況,有時候我們需要的空間只有在運行之后才能知道,所以需要開辟一個動態(tài)內(nèi)存空間,滿足更多需求。

1、malloc函數(shù)

void* malloc (size_t size);

malloc函數(shù)是向內(nèi)存申請一塊連續(xù)的空間,并返回指向這塊空間的指針,如果開辟成功則指向開辟好的空間,如果開辟失敗,則返回NULL,所以在使用之前要對開辟的空間進(jìn)行一個判斷。malloc函數(shù)的返回值是void*,所以在具體使用的時候可以由我們來指定。

給一個int型數(shù)組開辟動態(tài)空間
int *p=(int *)malloc(sizeof(int)*n);
(int *)給malloc強轉(zhuǎn)一下,之后我們給數(shù)組開辟空間,可以用sizeof(int)*n這樣我們就可以只改變n的大小。

我們也可以給一個結(jié)構(gòu)體開辟動態(tài)空間
//假設(shè)結(jié)構(gòu)體名為student
student *ptr=(student *)malloc(sizeof(student));

2、free函數(shù)

void free (void* ptr);

當(dāng)我們給變量開辟了動態(tài)空間后使用完需要進(jìn)行釋放,否則有可能會出現(xiàn)內(nèi)存泄漏的問題。

釋放的時候就是在使用完整個變量后free掉
free( p);
free(ptr);
我們將空間釋放后指針其實還指向的是原來的空間,只是內(nèi)部存儲的數(shù)據(jù)全部釋放了,所以為了防止形成野指針,我們要在free的后面講指針賦為空。
free( p);
p=NULL;
free(ptr);
ptr=NULL;

當(dāng)然釋放過的空間不能重復(fù)釋放
free( p);
free( p);
free( p);
這樣是會報錯的,不能重復(fù)釋放一個已經(jīng)釋放的空間
但是下面這樣是可以的,將指針?biāo)傅牡刂纷優(yōu)榭?br /> free( p);
p=NULL;
free( p);

3、calloc函數(shù)

void* calloc (size_t num, size_t size)

calloc函數(shù)的功能是為num個大小為size的元素開辟一塊空間,它的作用和malloc相似,但是calloc與malloc函數(shù)不同之處在于,他可以在開辟空間的同時把空間的每個字節(jié)初始化為0。

用法和malloc函數(shù)一致
int *p=(int *)calloc(10,sizeod(int));
釋放的時候也與malloc函數(shù)一致
free( p);
p=NULL;

所以我們要對申請的內(nèi)存空間初始化時,可以直接使用calloc函數(shù)

4、realloc函數(shù)

void* realloc (void* ptr, size_t size)

我們有時會發(fā)現(xiàn)之前申請的空間太大或者太小的不合適的時候,就可以利用realloc函數(shù)對動態(tài)開辟的空間進(jìn)行調(diào)整,realloc函數(shù)的出現(xiàn)也讓動態(tài)內(nèi)存管理更加的靈活。

int *p=(int *)malloc(sizeof(int)*10);
p=(int *)realloc(p,sizeof(int)*20);空間改大
p=(int *)realloc(p,sizeof(int)*5);空間改小
空間改大改小都是可以的

realloc函數(shù)的實質(zhì)其實是另外開辟一個更大或者更小的空間,將原來的數(shù)復(fù)制過去,復(fù)制過去之后再將原來的空間釋放掉,所以會保留原本的數(shù)據(jù)。

int *ptr=(int *)malloc(100);
int *p=NULL;
p=(int *)realloc(ptr,20);
if (p != NULL)
{
ptr=p;
}
free(ptr);
ptr=NULL;

在實際運用時將新開辟的空間賦給一個新的變量可以更好地保護程序,因為如果新的空間開辟失敗了我們也不會將原本的空間丟失,還能將原本的空間保留。

總結(jié)

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

相關(guān)文章

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

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

    這篇文章主要介紹了二分查找算法在C語言程序中的使用示例,文中最后提到了使用二分查找法一個需要注意的地方,需要的朋友可以參考下
    2021-08-08
  • 深入了解C語言字符函數(shù)和字符串函數(shù)

    深入了解C語言字符函數(shù)和字符串函數(shù)

    這篇文章主要給大家介紹了關(guān)于C語言字符/字符串的相關(guān)函數(shù),文中通過示例代碼總結(jié)的非常詳細(xì),對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 數(shù)據(jù)結(jié)構(gòu)之帶頭結(jié)點的單鏈表

    數(shù)據(jù)結(jié)構(gòu)之帶頭結(jié)點的單鏈表

    單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點來表示的,每個結(jié)點的構(gòu)成:數(shù)據(jù)域(數(shù)據(jù)元素的映象)?+?指針域(指示后繼元素存儲位置),元素就是存儲數(shù)據(jù)的存儲單元,指針就是連接每個結(jié)點的地址數(shù)據(jù)
    2023-07-07
  • C++教程之變量的作用域與生命周期詳解

    C++教程之變量的作用域與生命周期詳解

    在C++編程中,變量的作用域和生命周期是非常重要的概念。了解這些概念可以幫助開發(fā)人員編寫更好的代碼并避免錯誤。在本文中,我們將探討C++中變量的作用域和生命周期,以及如何正確地使用它們
    2023-04-04
  • c++ qsort 與sort 對結(jié)構(gòu)體排序?qū)嵗a

    c++ qsort 與sort 對結(jié)構(gòu)體排序?qū)嵗a

    這篇文章主要介紹了c++ qsort 與sort 對結(jié)構(gòu)體排序?qū)嵗a,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-11-11
  • C++基礎(chǔ)入門教程(五):new和delete

    C++基礎(chǔ)入門教程(五):new和delete

    這篇文章主要介紹了C++基礎(chǔ)入門教程(五):new和delete,本文講解了動態(tài)分配內(nèi)存、new和delete的配對、new、delete與reatin、release的關(guān)系、動態(tài)數(shù)組等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • C++中引用(&)的用法與應(yīng)用實例分析

    C++中引用(&)的用法與應(yīng)用實例分析

    引用是C++引入的新語言特性,是C++常用的一個重要內(nèi)容之一,正確、靈活地使用引用,可以使程序簡潔、高效。故在本篇中我將對引用進(jìn)行詳細(xì)討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用
    2013-09-09
  • 深入學(xué)習(xí)C語言mmap和shm*的使用方法技巧

    深入學(xué)習(xí)C語言mmap和shm*的使用方法技巧

    本文將詳細(xì)介紹mmap和shm的工作原理,包括它們在內(nèi)存映射和共享內(nèi)存方面的優(yōu)勢和適用場景,同時,文章還會分享一些使用mmap和shm的技巧和經(jīng)驗,以幫助讀者優(yōu)化并提高程序性能,使你能夠在實際項目中更好地利用這些技術(shù)來加速數(shù)據(jù)共享和多線程應(yīng)用
    2023-10-10
  • C++回調(diào)函數(shù)的理解和使用教程

    C++回調(diào)函數(shù)的理解和使用教程

    這篇文章主要給大家介紹了關(guān)于C++回調(diào)函數(shù)的理解和使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C++實現(xiàn)簡單單向鏈表

    C++實現(xiàn)簡單單向鏈表

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡單單向鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評論

沙坪坝区| 墨玉县| 瓮安县| 乐昌市| 江津市| 楚雄市| 湘西| 体育| 三穗县| 双城市| 乌拉特后旗| 台东县| 托克托县| 东乡族自治县| 长葛市| 富阳市| 姜堰市| 高密市| 会昌县| 丹阳市| 丘北县| 玉林市| 岳阳县| 铜山县| 辽源市| 武山县| 扶风县| 武安市| 白银市| 沈丘县| 东至县| 建昌县| 仪陇县| 平顺县| 潍坊市| 萨迦县| 庆安县| 乌审旗| 昆明市| 湟源县| 教育|