运用动态内存分配可以有效解决定义的数组或者结构体大小不够用的情况,动态内存分配就是人为的向系统申请一个指定大小的空间用来存放临时数据。在c语言中,一些可控或者说是一些小数据下,可以人为定义一些变量用来存放数据,在函数结束时释放掉,看起来很方便,其实很受限制,在一些不可控或者是大数据下的情况,我们无法得知我们需要多大的容量来存放他们,我们可以举个例子,一个电话簿中,一个联系人就是一个结构体变量,用来存放一些信息,但是这个电话簿有多少联系人呢?答案是若干个。我们不可能定义一个结构体数组来确定其容量,因为人数我们是不可控的,因此我们就引用了动态内存分配的概念,我们开始就初始化一个空间,可以存放比如就3个人吧,当要存放第4个人是就自动开辟一个指定大小的空间来存放联系人的信息,用完就开辟。

这里就要引用到2个函数,malloc函数,free函数。

malloc函数用法

void* malloc(unsigned int size)

其作用是向系统申请一个长度为size的连续空间,其返回值是所分配空间的第一个字节的地址,倘若开辟失败就会返回一个空指针,所以在使用时要对其返回值进行判断。

free函数用法

void free(void* p)

有借就有还,其作用是用来释放指针变量p所指向的动态空间,也就是归还这部分空间给系统,该函数无返回值,其余malloc函数成对使用。

开辟了空间用完后就要释放掉,用了malloc函数就要用free函数,倘若开辟了最后不释放的话,会造成内存泄漏。接下来举个例子:

最后再说一点,malloc这个函数很强,运用这个函数,几行代码就可以写一个恶意程序让你的电脑轻松崩溃,要是还加载到开机启动项里那你就重装系统吧,哈哈,小伙伴们可不要轻易尝试哦,要试也在自己电脑上试,毕竟友谊的小船说翻就会翻哦。

malloc动态内存分配相关推荐

  1. 使用malloc动态内存分配一个二维数组

    由于一部分编译器(比如说vs 2019)不支持创建数组时元素个数为变量,今天使用malloc来实现此功能. 详细注释和代码如下 //动态内存分配 模拟二维数组 #include<stdio.h& ...

  2. 【 C 】动态内存分配实用案例(二)之复制字符串

    用动态分配内存制作一个字符串的一份拷贝.注意:调用程序应该负责检查这块内存是否分配成功,这样做允许程序以任何它所希望的方式对错误作出反应. #nclude <stdlib.h> #incl ...

  3. C中的malloc:C中的动态内存分配

    什么是C中的malloc()? (What is malloc() in C?) malloc() is a library function that allows C to allocate me ...

  4. c语言malloc引用类型作参数,c语言中动态内存分配malloc只在堆中分配一片内存.doc...

    c语言中动态内存分配malloc只在堆中分配一片内存 .C语言中动态内存分配(malloc)只在堆中分配一片内存,返回一个void指针(分配失败则返回0),并没有创建一个对象.使用时需要强制转换成恰当 ...

  5. 动态内存分配(malloc函数)

    动态内存分配 原型 extern void*malloc(unsigned int num_bytes); 头文件 #include<stdlib.h> 功能 分配长度为num_bytes ...

  6. 关于动态内存分配malloc的初级用法和注意事项

    #include <stdio.h> #include <stdlib.h> int main(int argc, const char *argv[]) { /*your c ...

  7. linux 在指定区域分配内存 c语言,C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存...

    一.malloc/free概述 malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数.free是进行内存释放的库函数. 1.函数原型 #include void *malloc( s ...

  8. C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存

    最新个人博客 shankusu.me 以下内容转载或参考或引用自 https://blog.csdn.net/zxx910509/article/details/62881131 一.malloc/f ...

  9. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)

    C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址.   取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符   地址的大小 ...

最新文章

  1. 美团真的让人无语!背调了一个多星期,跟我说背调不通过!问原因,HR说没办法透露,但可以看其它美团机会...
  2. 未来属于人工智能工程师,但成功转型不容易
  3. java 只读数组_在Java 8中创建方法引用数组的速记方法?
  4. 三十九、@staticmethod、@classmethod和@property类装饰器
  5. mysql+encode+decode+错误_mysql decode encode 乱码问题
  6. 噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...
  7. 使用Spring Rest和Spring Data JPA和H2以及Spring Boot示例的Restful API
  8. mysql parameter_C#MySqlParameter问题
  9. ftp 服务器 性能,FTP 服务器性能 测试点
  10. 未来函数在线检测_嵌入式实时操作系统任务栈溢出检测原理
  11. 商汤科技回应“IPO推迟”:“被”IPO,还“被”推迟了
  12. xcode6.1中 symbolicatecrash位置
  13. Trello使用向导
  14. windows下一次简单的拖库练习
  15. Django文档4.0(通俗易懂)
  16. 平衡小车之家--风力摆开箱实录(附资料)
  17. RT Thread外设驱动添加-STH3x
  18. 从gitlab迁移到极狐gitlab的方法 #JIHULAB101
  19. 结构光三维重建(二)线结构光三维重建
  20. 世界 6 大航空动力巨头企业

热门文章

  1. 百练4982 踩方格
  2. 基于百度语音识别API的Python语音识别小程序
  3. 极速理解设计模式系列:6.适配器模式(Adapter Pattern)
  4. TODO:macOS上ThinkPHP5和Semantic-UI集成
  5. mysqld_multi stop 不能停掉mysql
  6. 减治求有重复元素的全排列
  7. 书店POS机--细化迭代2--测试
  8. jQuery中的.bind()、.live()和.delegate()之间区别分析,学习jquery
  9. 《Spring Recipes》第二章笔记:Creating Beans by Invokin...
  10. 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇