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

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

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

動態(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,所以在使用之前要對開辟的空間進行一個判斷。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)空間
//假設結(jié)構(gòu)體名為student
student *ptr=(student *)malloc(sizeof(student));

2、free函數(shù)

void free (void* ptr);

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

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

當然釋放過的空間不能重復釋放
free( p);
free( p);
free( p);
這樣是會報錯的,不能重復釋放一個已經(jīng)釋放的空間
但是下面這樣是可以的,將指針所指的地址變?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)開辟的空間進行調(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ù)復制過去,復制過去之后再將原來的空間釋放掉,所以會保留原本的數(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é)

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

相關文章

  • 一篇文章帶你了解C/C++的回調(diào)函數(shù)

    一篇文章帶你了解C/C++的回調(diào)函數(shù)

    這篇文章主要為大家介紹了C/C++的回調(diào)函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C語言實現(xiàn)簡單猜拳小游戲

    C語言實現(xiàn)簡單猜拳小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單猜拳小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • C++實現(xiàn)職工工資管理系統(tǒng)

    C++實現(xiàn)職工工資管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單的職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Qt中控件的函數(shù)使用教程分享

    Qt中控件的函數(shù)使用教程分享

    這篇文章主要為大家詳細介紹了Qt中部分控件(Text Edit編輯框、Combo Box下拉框、List Wiget和Label)函數(shù)的使用,感興趣的小伙伴可以了解一下
    2022-12-12
  • C++實現(xiàn)趣味掃雷游戲

    C++實現(xiàn)趣味掃雷游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)趣味掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++中四種加密算法之DES源代碼

    C++中四種加密算法之DES源代碼

    本篇文章主要介紹了C++中四種加密算法之DES源代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。
    2016-11-11
  • c++數(shù)組排序的5種方法實例代碼

    c++數(shù)組排序的5種方法實例代碼

    大家還在為大小排序而煩惱嗎?今天讓我我大家解決這個問題吧,下面這篇文章主要給大家介紹了關于c++數(shù)組排序的5種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • C語言實現(xiàn)通訊錄程序

    C語言實現(xiàn)通訊錄程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)通訊錄程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言實現(xiàn)簡單的<三子棋>案例

    C語言實現(xiàn)簡單的<三子棋>案例

    這篇文章主要介紹了C語言實現(xiàn)簡單的《三子棋》,本文通過功能區(qū)分一步步實現(xiàn)該案例,通過逐步的解析和代碼列舉,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++獲取本機MAC,IP,MASK地址的方法

    C++獲取本機MAC,IP,MASK地址的方法

    這篇文章主要介紹了C++獲取本機MAC,IP,MASK地址的方法,主要通過IPHLPAPI.lib調(diào)用相關函數(shù)實現(xiàn)該功能,是非常實用的技巧,需要的朋友可以參考下
    2014-10-10

最新評論