-
calloc
鎖定
函數名: calloc
函數原型:void* calloc(unsigned int num,unsigned int size);
- 中文名
- 動態內存分配並做初始化
- 外文名
- clear allocation
- 函數名
- calloc
- 函數原型
- void *calloc
calloc函數簡介
- 原型:void* calloc(unsigned int num,unsigned int size);
- 功能:在內存的動態存儲區中分配num個長度為size的連續空間;
- 注意:num:對象個數,size:對象佔據的內存字節數,相較於malloc函數,calloc函數會自動將內存初始化為0;
calloc與malloc的區別
calloc在動態分配完內存後,自動初始化該內存空間為零,而malloc不做初始化,分配到的空間中的數據是隨機數據。其中malloc的簡介如下:
- 功能:動態分配內存;
calloc用 法
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(起始地址的指針) 對內存進行釋放,不然內存申請過多會影響計算機的性能,以至於得重啓電腦。如果使用過後不清零,還可以使用該指針對該塊內存進行訪問。
相關函數:malloc、realloc、free _alloca
calloc應用舉例
calloc程序例1
#define _CRT_SECURE_NO_WARNINGS #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; }
calloc程序例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。