日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C99 calloc、malloc和realloc区别

發布時間:2024/10/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C99 calloc、malloc和realloc区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2018-01-26 創建人:Ruo_Xiao 參考文檔:C99標準 郵箱:xclsoftware@163.com

一、共同點

  • 均來自頭文件:stdlib.h
  • 分配的內存都是連續的。
  • 返回值為void *,C/C++規定,void* 類型可以通過類型轉換強制轉換為任何其它類型的指針。
  • 若成功,則返回內存對齊的指針;若失敗,則返回NULL。
  • 均有free釋放。
  • 二、calloc

    1、原型:

    void *calloc(size_t nmemb, size_t size);

    2、功能描述
    calloc函數申請一個元素個數為nmemb的內存塊,每一個元素大小為size,每個元素自動初始化為0。
    3、栗子:

    char *pStr = NULL;/*分配內存空間*/pStr = (char*)calloc(10,sizeof(char));

    結果如下:

    查看內存:

    大家可以發現,該地址后面10個字節均是0,而第11、12、13和14個字節均是未定義,故calloc連續分配了10個字節的內存并自動清零。

    三、malloc

    1、全稱:memory allocation,中文叫動態內存分配。
    2、原型:

    void *malloc(size_t size);

    3、功能描述
    malloc 申請指定size大小的內存塊,其值不會初始化。
    4、栗子:

    int *pi = NULL;/*分配內存空間*/pi = (int*)malloc(10*sizeof(int));

    結果:

    查看內存:

    大家可以發現,該地址后面40個字節均是cd,而第41、42、43個字節均是未定義,故malloc連續分配了40個字節的內存但沒有初始化。

    四、realloc

    1、原型

    void *realloc(void *ptr, size_t size);

    2、功能描述
    (1)釋放原來的內存空間,若原地址后面有足夠的內存,則在同一地址下申請size大小的新內存塊。若沒有,則在新的內存地址下申請內存。
    (2)若size小于原來的內存大小,則原數據末尾部分丟失。若size大于原來的內存大小,則原數據完整拷貝到新的內存塊,多出來的內存塊不初始化。
    栗子:

    int *pi1 = NULL;int *pi2 = NULL;pi1 = (int *)malloc(3*sizeof(int));pi1[0] = 1;pi1[1] = 2;pi1[2] = 3;pi2 = (int *)realloc(pi1,4*sizeof(int));

    結果:

    查看內存:

    修改代碼如下:

    pi2 = (int *)realloc(pi1,2*sizeof(int));

    結果:

    查看內存:

    (3)若ptr為NULL,size非零,則realloc會申請一個新的內存塊,大小為size,等同于malloc。
    栗子:

    int *pi2 = NULL;pi2 = (int *)realloc(NULL,2*sizeof(int));

    結果:

    查看內存:

    (4)若ptr有值,但size為0時,則釋放內存,返回NULL,等同于free。
    栗子:

    int *pi1 = NULL;int *pi2 = NULL;pi1 = (int *)malloc(3*sizeof(int));pi1[0] = 1;pi1[1] = 2;pi1[2] = 3;pi2 = (int *)realloc(pi1,NULL);

    結果:

    五、free

    1、頭文件:stdlib.h
    2、原型:

    void free(void *ptr);

    3、功能描述:
    釋放malloc(或calloc、realloc)函數給指針變量分配的內存空間。
    4、使用后該指針變量一定要重新指向NULL,防止野指針出現,有效 規避誤操作。
    5、若形參為NULL,無操作。

    總結

    以上是生活随笔為你收集整理的C99 calloc、malloc和realloc区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。