calloc

calloc

函式名: calloc

函式原型:void* calloc(unsigned int num,unsigned int size);

功能:在記憶體的動態存儲區中分配n個長度為size的連續空間,函式返回一個指向分配起始地址的指針;如果分配不成功,返回NULL。

基本介紹

  • 中文名:動態記憶體分配並清零
  • 外文名:clear allocation
  • 函式名: calloc
  • 函式原型:void *calloc
  • 功 能:動態存儲區中分配num個長度為size的連續空間
  • 頭檔案stdlib.hmalloc.h
  • 相關函式mallocreallocfree  _alloca
  • 領域:編程
函式簡介,與malloc的區別,用 法,套用舉例,程式例1,程式例2,

函式簡介

  • 原型:void* calloc(unsigned int num,unsigned int size);
  • 功能:在記憶體的動態存儲區中分配num個長度為size的連續空間;
  • 注意:num:對象個數,size:對象占據的記憶體位元組數,相較於malloc函式,calloc函式會自動將記憶體初始化為0;

與malloc的區別

calloc在動態分配完記憶體後,自動初始化該記憶體空間為零,而malloc不做初始化,分配到的空間中的數據是隨機數據。其中malloc的簡介如下:
  • 原型:extern void* malloc(unsigned int size);
  • 功能:動態分配記憶體;
  • 注意:size僅僅為申請記憶體位元組大小,與申請記憶體塊中存儲的數據類型無關,故編程時建議通過以下方式給出,"長度 * sizeof(數據類型)";

用 法

void *calloc(size_t nmenb, size_t size);
calloc()函式為nmemb個元素的數組分配記憶體空間,其中,每個元素的長度都是size個位元組。如果要求的空間無效,那么此函式返回指針。在分配了記憶體之後,calloc()函式會通過將所有位設定為0的方式進行初始化。比如,調用calloc()函式為n個整數的數組分配存儲空間,且保證所有整數初始化為0:
pi = calloc(n, sizeof(int));
因為calloc()函式會清空分配的記憶體,而malloc()函式不會,所以可以調用以“1”作為第一個實參的calloc()函式,為任何類型的數據項分配空間。比如:
struct point{ int x, y;} *pi;
pi = calloc(1, sizeof(struct point));
在執行此語句後,pi將指向一個結構體,且此結構體的成員x和y都會被設為0。
一般使用後要使用 free(起始地址的指針) 對記憶體進行釋放,不然記憶體申請過多會影響計算機的性能,以至於得重啟電腦。如果使用過後不清零,還可以使用該指針對該塊記憶體進行訪問。
頭檔案:stdlib.hmalloc.h
相關函式:malloc、realloc、free _alloca

套用舉例

程式例1

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){    char*str = NULL;    /*分配記憶體空間*/    str = (char*)calloc(10,sizeof(char));    /*將hello寫入*/    strcpy(str, "Hello");    /*顯示變數內容*/    printf("String is %s\n",str);    /*釋放空間*/    free(str);    return 0;}

程式例2

從這個例子可以看出calloc分配完存儲空間後將元素初始化。
#include<stdio.h>#include<stdlib.h>int main(){    int i;    int* pn = (int*)calloc(10, sizeof(int));    for(i = 0;i < 10;i++)        printf("%d", pn[i]);    printf("\n");    free(pn);    return 0;}
輸出十個0。

相關詞條

熱門詞條

聯絡我們