前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言/动态内存管理函数

C语言/动态内存管理函数

作者头像
用户10788736
发布2023-10-16 08:30:12
1570
发布2023-10-16 08:30:12
举报
文章被收录于专栏:CSDN搬移文章

前言

在使用C语言编写程序时,使用动态内存是不可避免的,因此了解动态内存管理函数也是必要的。

本文讲了关于动态内存管理的四个函数的使用和注意事项。

一、内存划分

以下为C程序运行时,内存的划分图:

二、malloc函数

该函数为C语言的动态内存开辟函数

代码语言:javascript
复制
void* malloc(size_t size);

注意事项:

  1. 开辟成功,返回一个指针,指向开辟好的空间;
  2. 开辟失败,返回NULL;
  3. 返回类型为void*,使用时需要用户根据需要修改数据类型;
  4. 若size为0,malloc的行为是未定义的,由编译器自己决定

三、calloc函数

该函数为C语言的动态内存分配函数

代码语言:javascript
复制
void* calloc(size_t num, size_t size);

num:元素个数;

size:字节大小。

注意事项:

  1. 开辟成功,返回一个指针,指向开辟好的空间;
  2. 开辟失败,返回NULL;
  3. 返回类型为void*,使用时需要用户根据需要修改数据类型;
  4. 若size为0,calloc的行为是未定义的,由编译器自己决定。

注:

malloc申请到的空间,没有初始化,直接返回起始地址;

calloc申请好空间后,会把空间初始化为0,然后返回起始地址。

四、realloc函数

该函数为C语言的对动态开辟内存大小的调整的函数

代码语言:javascript
复制
void* realloc(void* ptr, size_t size);

注意事项:

  1. 指针ptr指向的内存空间后,有足够的空间可以扩容,直接在后边续上新的空间,返回旧的起始地址
  2. 当后边没有足够的空间扩容时,realloc会找一个满足空间大小连续的空间。把旧的空间的数据拷贝新空间的前面的位置,并且把旧的空间释放掉返回新的空间的地址
  3. realloc扩容失败时,返回NULL。

五、free函数

专门做动态内存释放和回收

代码语言:javascript
复制
void free(void* ptr);

注意:

        ptr是指向一片连续堆区的内存空间。

总结

在使用完calloc|malloc|realloc函数之后,一定一定要记得使用free函数释放空间哦~

上述函数说明就是整个动态内存管理函数的全部啦,如果你有兴趣想要深入了解,可以通过写一个动态的通讯录理解它们C_Ccpp/C_study/contact at main · Yjun6/C_Ccpp (github.com)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、内存划分
  • 二、malloc函数
  • 三、calloc函数
  • 四、realloc函数
  • 五、free函数
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档