首页 > 编程笔记 > C语言笔记 阅读:34

calloc在c语言中的用法(附带实例)

在内存的全局存储空间中,用于程序动态分配和释放的内存块称为自由存储空间,通常也称为堆。

在 C语言程序中,可以使用 calloc() 函数来从堆中动态地分配和释放内存。

calloc() 函数位于<stdlib.h>头文件中,它的原型如下:
void *calloc(unsigned n, unsigned size);
该函数的功能是在内存中动态分配 n 个长度为 size 的连续内存空间数组。

calloc() 函数会返回一个指针,该指针指向动态分配的内存空间数组的地址,当分配内存空间出错时,返回空指针。

例如,使用该函数分配一个整型内存空间数组,代码如下:
int* pArray;                                 /*定义指针*/
pArray=(int*)calloc(3,sizeof(int));          /*分配整型内存空间数组*/
上面代码中的 pArray 为一个整型指针,使用 calloc() 函数分配内存空间数组,第一个参数表示分配数组中元素的个数,而第二个参数表示元素的类型。

calloc() 函数成功分配内存空间后会返回一个指针,因为分配的是 int 型的内存空间,所以返回的指针也应该是相对应的 int 型指针,这样就要进行强制类型转换。最后将返回的指针赋给 pArray 指针变量,pArray 指向的就是该数组的首地址。

【实例】动态分配一个内存空间数组。使用 strcpy() 函数为字符数组赋值,再进行输出,验证分配内存空间以正确保存数据。
#define _CRT_SECURE_NO_WARNINGS             /*解除vs安全性检测问题*/
#include <stdlib.h>                        /*包含头文件*/
#include<stdio.h>
#include<string.h>

int main()                                 /*主函数main()*/
{
   char* ch;                               /*定义指针*/
   ch = (char*)calloc(30, sizeof(char));   /*分配变量*/
   strcpy(ch, "https://c.biancheng.net");  /*将字符串进行复制*/
   printf("%s\n", ch);                     /*输出字符串*/
   free(ch);                               /*释放空间*/
   return 0;                               /*程序结束*/
}
运行程序,结果为:

https://c.biancheng.net

注意,使用 calloc() 函数分配的内存空间是在堆中,而不是在栈中。因此在使用完这块内存空间之后一定要将其释放掉,释放内存空间使用的是 free() 函数。

相关文章