当前位置:网站首页>C语言的动态内存管理函数
C语言的动态内存管理函数
2022-07-28 05:26:00 【JuLiJuLi.】
动态内存管理库函数有malloc、free、 calloc 、realloc 这几个,那我们有没有想过为什么会存在动态内存管理呢,因为有时候我们需要的内存空间大小只有在程序运行后才能知道我们到底需要多少内存空间,这个时候就需要动态开辟内存空间了。
我们知道内存中分为几个区域,那我们的动态内存管理函数可以操控的是哪个区域呢?
malloc函数

malloc函数的作用是在内存中开辟一块空间,如果开辟成功就把这块空间的起始位置返回,失败则返回NULL指针。
介绍malloc函数的同时也要知道free函数的作用,free函数用来释放我们动态开辟的内存空间,如果free函数的参数指向的空间不是动态开辟的,那free函数的行为是未定义的,如果free函数的参数是NULL指针,那free函数什么事都不做,我们尽量把malloc函数与free函数一起配合着使用,动态内存使用完就还把内存还给操作系统,这样我们的内存就能得到更好的利用。
下面来看malloc函数该如何使用:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int* s1 = (int*)malloc(40); //向内存申请40个字节的空间,因为malloc函数的返回值是void*的这里要强制类型转换位int*
int* flag = s1; //先记录s1的起始位置,后面留着free释放这块空间
if (flag == NULL) //这里先判断malloc是否开辟成功,成功返回一个有效地址,失败则返回一个NULL指针,所以这里要先判断下
{
perror("malloc:"); //perror函数是打印出上一个函数的错误信息,开辟失败我们就打印下错误信息看下
return 1;
}
for (int i = 0; i < 10; i++)
{
*flag = i;
flag++;
}
free(s1); //使用后free释放这块空间
s1 = NULL; //将s1置为NULL指针
return 0;
}

calloc函数

calloc函数的作用是在内存中开辟一块空间,这个函数的参数num是要开辟的空间的元素大小,第二个size是每一个元素的大小,开辟成功就把这块空间全部置为0,然后返回这块空间的起始位置,开辟失败则返回NULL指针。
realloc函数

realloc函数第一个参数是要调整的内存地址,第二个参数是调整之后的大小,返回值是调整后的内存起始位置。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int* s1 = (int*)malloc(40);
int* flag = s1;
if (flag != NULL)
{
for (int i = 0; i < 10; i++)
{
*flag= i;
flag++;
}
} //假设发现空间不够,希望增加
int* s2 = (int*)realloc(s1, 80); //扩展
if (s2 != NULL)
{
s1 = s2;
}
//扩展成功后继续使用
free(s1); //使用后释放这块空间还给操作系统
s1 = NULL;//置为空指针
return 0;
}
realloc函数在扩展的时候会出现两种情况:
边栏推荐
猜你喜欢
随机推荐
我的部署笔记
Listener
ubuntu mysql 设置远程访问权限
相对路径和绝对路径
七夕礼物送女生什么好?颜值在线又有心意的礼物推荐
QT parse string into JSON data and parse
自定义组件--纯数据字段&组件的生命周期
QT batch operation control and set signal slot
qt批量操作控件,并设置信号槽
2022-05-24 SpEL使用
qt绘画事件-设置背景图片
Perl Introduction (10) formatted output
qt实现将相关信息输出到日志文件
JSP实现文件上传功能的同时还要向后台传递参数
【学习笔记】编码能力
Icc2 (IV) routing and postroute optimization
Pytorch learning notes 2 - about tensor
做气传导耳机最好的是哪家、最好的气传导耳机盘点
Filter
What are the common English questions in the postgraduate interview?







![[untitled]](/img/de/746832bfb3bb79b090215b135b8917.jpg)

