在嵌入式系统中动态内存申请存在比一般系统编程时更严格的要求,这是因为嵌入式系统的内存空间往往是十分有限的,不经意的内存泄露会很快导致系统的崩溃。

   所以一定要保证你的malloc和free成对出现,如果你写出这样的一段程序:

char * function(void)
{
  char *p;
  p = (char *)malloc(…);
  if(p==NULL)
   …;
   … /* 一系列针对p的操作 */
  return p;
}

   在某处调用function(),用完function中动态申请的内存后将其free,如下:

char *q = function();

free(q);

   上述代码明显是不合理的,因为违反了malloc和free成对出现的原则,即"谁申请,就由谁释放"原则。不满足这个原则,会导致代码的耦合度增大,因为用户在调用function函数时需要知道其内部细节!

   正确的做法是在调用处申请内存,并传入function函数,如下:

char *p=malloc(…);
if(p==NULL)
…;
function(p);

free(p);
p=NULL;

   而函数function则接收参数p,如下:

void function(char *p)
{
  … /* 一系列针对p的操作 */
}
在上位机编程中,亦应如此。

内存资源的申请与释放(CC++)相关推荐

  1. C++之内存管理:申请与释放

    目录 前言 1.C/C++内存分布 1.1虚拟内存分段 1.2理解一些概念 1.2.1栈帧向下增长 1.2.2堆向上生长 1.2.3栈和堆会碰撞吗? 1.2.4关于const的说明 2.C语言中动态内 ...

  2. 05.内存管理:动态申请和释放内存

    动态分配内存,进行内存管理 参考: 伙伴算法原理简介 linux 0.11源码 本文主要针对Linux0.11的malloc和free进行分析.是一种类似伙伴系统的内存管理方法,不过伙伴系统的内存通常 ...

  3. C++内存管理——空间申请、释放的新玩法

    malloc free与new delete的不同 1.底层原理上的差异 malloc 只是在堆上开辟空间(以字节为单位),free配合malloc进行空间的释放 new针对自定义类型,会先调用ope ...

  4. 释放内存资源,我用empty.exe命令

    Windows平台下的应用程序体积越来越大,随之,占用的内存资源也不断增加.很多程序占用大量内存资源后却不能及时释放,造成极大的浪费.虽然使用第三方内存管理软件可以释放空闲内存资源,但很有可能引起系统 ...

  5. C/C++申请和释放内存

    new 和 delete 是 C++ 用于管理堆内存的两个运算符,对应于C语言中的 malloc 和 free,但是 malloc 和 free 是函数,而new 和 delete 是运算符.除此之外 ...

  6. 内存申请与释放(转)

    释放内存?那要看你怎么申请的了 new->delete;malloc->free;GlobalAlloc->GlobalFree;VirtualAlloc(Ex)->Virtu ...

  7. 关于C/C++动态申请空间释放和内存泄漏问题介绍

    1. 动态申请空间 1.1 基本内容 Ⅰ 动态申请的空间没有具体名称,只能通过指针间接访问(无论new还是malloc方式). Ⅱ 动态申请空间都是存放在堆中,有别于系统自动分配的空间是存放在堆栈中( ...

  8. fork练习、从进程角度考虑堆区内存申请与释放的有关问题

    1.fork练习 1.1代码1; int main( int argc, char* argv[], char* envp[]) {int i = 0;for( ; i < 2; i++ ){f ...

  9. C/C++代码调试:快速定位内存的申请和释放的位置

    1.问题 如果大型项目中出现类似于*** glibc detected *** logcacheinit: double free or corruption (fasttop): 0x0000000 ...

最新文章

  1. 神经网络到底是如何思考的?MIT精英们做了这么一个实验室来搞清楚
  2. mongodb模糊查询 php7_详解php7如何实现MongoDB模糊查询
  3. 如果我要....(生活版)
  4. java利用intellij进行类型推断
  5. Qt多文件传输功能实现及方法概述
  6. 民国大学教授收入有多高?
  7. 吴恩达机器学习之单变量线性回归理论部分
  8. jdbc数据源连接oracle,请教JDBC怎么连接ORACLE数据库
  9. 如何自动生成和安装requirements.txt依赖
  10. 18. Make interfaces esay to use correctly and hard to use incorrectly
  11. iometer使用教程linux,Iometer磁盘测试工具中文使用说明手册 二
  12. 中国东北到美洲比中国南边到美洲更近?
  13. [学习笔记-FPGA]Vivado出现信号差分问题
  14. 下载支持包时出现问题。要解决此问题,请参阅相应的 MATLAB Answer
  15. Object Track(十):经典论文JDE速读
  16. Excel:每隔几行求取一次平均值(基于函数功能)
  17. 运筹学 基础 知识点总结 (八)
  18. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(7月29日)...
  19. 支付宝“刷脸支付”韩国遇冷 真相让人笑出眼泪
  20. C语言和C++中locale设置

热门文章

  1. MCU助推居家移动医疗微型化
  2. kafka系列文章索引
  3. 嵌入式Linux中I2C设备驱动程序的研究与实现
  4. 【无线***实战】小试无线安全
  5. java------线程同步方法
  6. Golang的协程(goroutine)和同步机制
  7. python numpy中astype使用不当导致图像出现artifact
  8. mysql半同步复制
  9. sqlite3API函数
  10. Delphi 7下使用VT实现树型列表结合控件