当前位置: C语言 -- 标准库 -- <stdlib.h> -- calloc

calloc函数


概要:
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);

描述:

该函数给数组(该数组有nmemb个元素,每个元素的大小为size个字节。)分配内存,并将所有位初始化为0

分配内存的生存期从内存分配开始到内存释放结束。

如果内存被成功分配,函数返回一个指向分配内存开始位置(即最低字节地址。)的指针。如果内存不能被分配,函数返回一个空指针。

如果请求的内存大小为0,函数行为将由实现定义:函数可能返回空指针表示错误;函数也可能像非0值一样返回指针,但返回的指针不能用于访问对象。

调用free函数或者realloc函数将释放全部或者部分分配内存。


参数:
size_t nmemb

元素数目。

size_t size

每个元素的大小。


返回值:

如果调用成功,函数返回一个指向分配内存的指针;如果失败,函数返回一个空指针。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
/*函数calloc范例*/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    /*统计一支球队一个赛季的进球数。*/
    int match;		//比赛场数。
    int total = 0;	//总进球数。
    int *pGoal;		//单场比赛的进球数。

    puts("Input the total number of matches.");
    scanf("%d", &match);

    /*分配内存。*/
    pGoal = calloc(match, sizeof(int));
    if(pGoal==NULL)
        exit(EXIT_FAILURE);

    /*统计数据。*/
    for(int i=0; i<match; ++i)
    {
        printf("Match %d: ", (i+1));
        scanf("%d", &pGoal[i]);
        total += pGoal[i];
    }

    /*释放内存。*/
    free(pGoal);

    printf("Total goals: %d\n", total);

    return 0;
}


结果:

假设输入为:

Input the total number of matches.

3

Match 1: 2

Match 2: 1

Match 3: 3

将输出:

Total goals: 6


相关内容:
aligned_alloc 分配对齐方式和大小都指定的内存的函数。
free 释放内存的函数。
malloc 分配指定大小内存的函数。
realloc 重新分配内存的函数。