当前位置: 首页 > article >正文

c语言程序设计---(动态内存分配)考研复试面试问答

动态内存分配

1、malloc函数

2、calloc函数

3、realloc函数

4、常见的动态内存错误


动态内存分配

1、malloc函数

C语言提供了一个动态内存开辟的函数:

void*malloc (size_t size);

  • 这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。
  • 如果开辟成功,则返回一个指向开辟好空间的指针。
  • 如果开辟失败,则返回一个null指针。因此malloc函数的返回值一定要给做检查
  • 返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来定义。
  • 如果参数size为零,malloc的行为标准是未定义的,取决于编译器。

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

当动态申请的空间不再使用的时候,应该还给操作系统。 malloc和free应该搭配成对使用。

如果没有回收,可能导致内存泄漏的问题

2、calloc函数

calloc函数也是动态内存分配。

void* calloc (size_t num,size_t size);

calloc函数功能是为num个大小为的size的元素开辟一块空间,并把空间的每个字节初始化为0.

与函数malloc的区别只在于他会在返回地址之前把申请的空间的每个字节初始化为全0。

3、realloc函数

realloc函数调整动态内存空间的大小。比如在使用malloc函数开辟20个字节空间,但是20个字节不能满足使用了,希望能够有四十个字节的空间,这时就需要用realloc函数来调整动态开辟的内存。

realloc函数使用的注意事项

  • 如果P指向的空间之后有足够的内存空间可以追加,则可以直接追加,后返回P。
  • 如果P指向的空间之后没有足够的内存空间可以追加,则realloc函数会重新找一个新的内存区域,开辟一块满足需求的空间,并且把原来内存的数据拷贝回来,释放旧的内存空间。最后返回新开辟的内存空间地址。
  • 得用一个新的变量来接收realloc函数的返回值。

4、常见的动态内存错误

(1)对null进行解引用操作

(2)对动态开辟的内存访问越界,

(3)对非动态开辟内存使用free释放。就是没有使用malloc函数,直接释放

(4)使用free释放动态开辟内存的一部分。就是释放的时候必须从首元素那个建立内存开始的时候进行释放,而不能在进行操作过程中,p指针指向内存中间位置,或者操作完指针p指向内存的最后的位置时释放。

(5)对同一块动态内存多次释放。比如开辟了一次内存空间,但是使用了多次free(p);为了避免这种现象,建议释放内存同时把指针p置为null

free(p);
p=null;

(6)动态开辟内存忘记释放,(会导致内存泄漏)。


http://www.kler.cn/a/582129.html

相关文章:

  • QEMU构建基于ubuntu的根文件系统
  • vue知识点(2)
  • Docker基础入门
  • 从0到1搭建前端项目
  • ROS实践(四)机器人建图及导航
  • C++ 布尔类型(bool)深度解析
  • Nginx快速安装-Linux-CentOS7
  • Docker介绍和安装
  • Three.js 进阶(灯光阴影关系和设置、平行光、阴影相机)
  • 如何将ipynb文件转换为pdf文件
  • 能否调整爬虫以支持多页商品列表?
  • 【制作PPT的AI工具】
  • http 服务器概念详细介绍
  • C++学习笔记(十六)——函数重载
  • 【每日学点HarmonyOS Next知识】重叠顺序、对话框位置、事件总线、PageMap显示、多表多item类型
  • 51单片机之蓝牙模块的使用
  • C#变量与变量作用域详解
  • 有哪些好用的AI视频加工创作网站
  • GStreamer —— 2.16、Windows下Qt加载GStreamer库后运行 - “播放教程 2:字幕管理“(附:完整源码)
  • Redis 持久化详解:RDB 与 AOF 的机制、配置与最佳实践