C/C++动态内存开辟(详解)

本文介绍了C/C++中的动态内存管理函数,包括malloc用于分配指定字节数的内存,calloc以零初始化的方式分配内存,以及realloc用于调整已分配内存的大小。同时,文章强调了使用这些函数时应注意的常见错误,如越界访问、释放非动态内存、部分释放内存、多次释放同一内存和忘记释放内存导致的内存泄漏问题。
摘要由CSDN通过智能技术生成

目录

一,mallloc

函数参数:

函数原理:

 二,calloc

函数参数:

函数原理:

三,realloc

函数参数:

函数原理:

 五,小结

2)对开辟空间的越界访问

3)对非动态内存开辟空间free4)只释放开辟内存的一部分

5)对同一块内存多次释放

6)忘记释放空间,造成内存泄漏


前言:C/C++中动态内存开辟的方法和函数有许多,我们这里主要讲解malloc,calloc,realloc。

细节和注意事项在最后小结

一,mallloc

函数参数:
void* malloc (size_t size)

malloc函数的参数是无符号整形,表示你要开辟内存空间的字节大小,返回值:如果开辟空间成功的首地址,开辟内存失败则会返回NULL指针,返回类型是void *,因此在接收时要进行强制转化,不然编译器可能报错。

例如:申请四十个空间的内存

int* ptr=(int *)malloc(40);

函数原理:它会在堆上找一块空间,空间大小会大于你输入的字节,方便释放和操作。

 二,calloc

函数参数:
void* calloc (size_t num, size_t size);

相较于malloc,calloc参数不同,它有两个参数,第一个参数是你要申请空间的数量大小,第二个参数是申请空间的每个单位的大小,返回值:如果开辟空间成功的首地址,开辟内存失败则会返回NULL指针。例如:申请十个int 类型的空间应该这样写:

int* temp=(int*)calloc(10,sizeof(int));//sizeof(int)可以改为4
函数原理:

参考malloc原理。

三,realloc

函数参数:
void* realloc (void* ptr, size_t size);

realloc函数用来修改已经开辟好的空间大小,参数有两个,第一个参数是原来开辟空间的地址,第二个参数是新开辟空间的字节大小,返回值:如果开辟空间成功的首地址,开辟内存失败则会返回NULL指针。

例如:修改malloc开辟的40个空间为50个字节

int* ptr=(int *)malloc(40);
int *ptr2=(int *)realloc(ptr,50);
函数原理:

与前面两个函数不同,realloc函数要做的事更多,函数更加复杂。它也会开辟大于字节的空间,但是它还要原来开辟空间里面的内容复制到新开辟的空间里面,然后释放原空间的内存。

 五,小结

malloc,calloc是用来在堆开辟空间的函数,realloc是修改已经开辟空间的内存。

使用完空间后要用free进行释放

free(ptr);

易见错误:

1)对NULL指针的解引用操作

因此每次开辟空间都有判断是否为NULL指针

2)对开辟空间的越界访问
3)对非动态内存开辟空间free
4)只释放开辟内存的一部分

因此尽量不要移动首地址,就算要移动也要记录地址,放在只释放一部分地址

5)对同一块内存多次释放
6)忘记释放空间,造成内存泄漏
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非洲下暴雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值