栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

动态内存分配(malloc calloc realloc free)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态内存分配(malloc calloc realloc free)

内存主要分三部分空间,栈区,堆区,静态区,而动态内存函数开辟出来的内存空间是在堆区的。

栈区:局部变量,函数形参

堆区:动态内存分配的,(malloc,calloc, realloc, free)

静态区:全局变量,静态变量

malloc函数:

malloc函数如果开辟空间成功,则返回那块空间的起始地址,如果开辟空间失败(可能原因:开辟的空间太大),则返回NULL,所以要检验返回的指针,

当开辟空间成功,并使用完毕后,应尽快释放这块空间(把这块空间还给操作系统),应用free()函数释放空间,释放完毕后p就是一个野指针了,为了避免以后通过p非法访问内存,应把p置为NULL

calloc函数:

calloc开辟好空间后,会把空间内容初始化为0

realloc函数:

 

 

realloc 函数分三种情况:

如果realloc函数第一个参数是NULL,则功能相当于malloc

下面看下动态内存开辟时的几种常见错误:

1. 对空指针的解引用:

2. 对动态开辟空间的越界访问:

 3.对非动态开辟空间的释放

4.释放动态开辟内存中的一部分

5.对同一块动态开辟内存的多次释放

6.动态开辟内存忘记释放(内存泄漏)

柔性数组:

1.结构中的柔性数组成员前面至少一个其他成员

2.sizeof返回这种结构大小不包括柔性数组的内存

3.包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739372.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号