【C语言】解析动态内存分配函数——malloc()函数、calloc()函数、realloc()函数

【C语言】解析动态内存分配函数——malloc()函数、calloc()函数、realloc()函数,第1张

CSDN话题挑战赛第2期
参赛话题:学习笔记


目录

 前言

1.malloc()函数

函数参数

 函数使用实例

2.calloc()函数 

 函数参数

函数使用实例 

3.reaclloc()函数

函数参数 

 函数使用实例


 前言

动态内存和使用静态内存的对比:

   静态内存空间开辟大小是固定的建立在栈上,不管用多少都会开辟指定大小,并且无法释放;反观动态内存空间开辟在堆上,不管开辟多少,最终会释放。


头文件:stdlib.h


注:C语言提供了另外一个函数free,专门是用来做动态内存的释放和回收的,函数原型

void free (void* ptr);
1.malloc()函数 函数参数

开辟一个大小位size(字节)的连续空间,若开辟成功返回类型是一个无符号类型的指针,若开辟不成功就返回空指针(NULL)。

void* malloc (size_t size);
 函数使用实例
include 
int main()
{
 int* ptr (int*)malloc(40);
 if(NULL != ptr)//判断ptr指针是否为空
 {
     int i = 0;
     for(i=0; i<10; i++)
     {
     *(ptr+i) = 0;
     }
 }
 free(ptr);//释放ptr所指向的动态内存
 ptr = NULL;
 return 0;
}
2.calloc()函数   函数参数

函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0,若开辟成功返回类型是一个无符号类型的指针,若开辟不成功就返回空指针(NULL)。

该函数相当于malloc()函数+memset()函数的结合体。

void* calloc (size_t num, size_t size);
函数使用实例 
#include 
#include 
int main()
{
 int *p = (int*)calloc(10, sizeof(int));
 if(NULL != p)
 {
     int i = 0;
     for(i=0; i<10; i++)
     {
     *(p+i) = 0;
     }

}
 free(p);
 p = NULL;
 return 0;
}

 

3.reaclloc()函数 函数参数 

将ptr指到的地方扩大(缩小)到size大小。

返回值为调整之后的内存起始位置。

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

 该函数使用时有两者情况:

情况一:原有空间之后有足够大的空间

要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。

情况二:原有空间之后没有足够大的空间

原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。 由于上述的两种情况,realloc函数的使用就要注意一些。

 函数使用实例
#include 
int main()
{
 int *ptr = (int*)malloc(100);
 if(ptr != NULL)
 {
     //业务处理
 }
 else
 {
     return 1;    
 }
 //扩展容量
 //代码1
 ptr = (int*)realloc(ptr, 1000);
 
 //代码2
 int*p = NULL;
 p = realloc(ptr, 1000);
 if(p != NULL)
 {
 ptr = p;
 }
 //业务处理
 free(ptr);
 return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/3001974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存