c语言中的内存管理(重点:动态内存申请释放,野指针,指针函数)

news/2024/7/20 16:02:44 标签: C语言, 嵌入式开发, 内存管理, malloc, 内存泄露
内存分布:
代码区
全局变量与静态变量区(全局变量,字符串常量等)
局部变量区(栈区)(自动分配,自动回收)
动态存储区(堆区)

动态内存
1.内存申请malloc要注意:
     1)参数:要申请空间的大小
     2)返回值:void * 
     3)要加出错判断
2.内存释放free要注意:
     1)释放的一定是起始地址
     2)释放内存的一部分是不允许的
     3)不能重复释放
     4)防止内存泄露

野指针的出现情况:
     1)指针变量没有初始化
     2)p在free之后,没有设置为NULL,让人认为是合法的指针。
     3)指针操作越界了

杜绝野指针:
     1)指针变量要初始化,如 int *p = NULL;
     2)free之后,设置为NULL。如 free(p);p = NULL;
     3)指针操作不越界(检查目标空间的长度)

指针函数:返回值是地址(指针)的函数。
指针函数应该返回什么样的地址?
     1)静态存储区中的地址:
          a)全局变量地址
          b)static修饰的局部变量
          c)字符串常量的地址
     2)堆区的地址
     3)函数的参数是指针,可返回

http://www.niftyadmin.cn/n/1407906.html

相关文章

SpringBoot热部署插件

1、配置在 maven工程中的pom.xml文件中 2、SpringBoot框架中提供的一个热部署插件,利用该热部署插件,我们可以在修改代码后不用重启应用,大大提高开发效率; 转载于:https://www.cnblogs.com/moonsoft/p/10364170.html

关于12306Bypass

1、软件的由来:由于10月份去出游导致被滞留在了杭州,不喜欢一切按计划执行所以没提前买票,从那时候我才知道什么是抢票。 2、成功抢到票:数字抢票提示音某某订票的提前设定好的参数(其实那时候是放出了10多张票,并不是我手快(-_-||))。 3、软…

日志文件报警监控脚本(可用于zabbix监控文件)测试中...

因业务要求,需要对某些日志文件中出现的关键字进行监控,所以写了个脚本用于直接用zabbix调用并返回超出阈值的监控项。 主要用来替代zabbix自带的文件监控项。可以对一台机器上的多个日志文件,多个触发阈值进行监控。不用配置多条zabbix监控项…

在VS2010下开发HTML5程序

在VS2010下应该先安装SP1后再安装这个插件,下载地址:http://visualstudiogallery.msdn.microsoft.com/a15c3ce9-f58f-42b7-8668-53f6cdc2cd83/安装后就可以在VS2010下设计HTML5,CSS3了。

内存拷贝函数的编写整理(很流行的面试题)

很多公司都喜欢出关于内存拷贝的这么一道题,下面是本人整理的关于内存拷贝函数编写的过程,仅供参考。 以下是我在一次模拟笔试中写的程序:void MyMemcpy(char *dst,char *src,int count){while(count--){*dst *src;}}很显然,这样…

dubbo源码解析(三十九)集群——merger

集群——merger 目标:介绍dubbo中集群的分组聚合,介绍dubbo-cluster下merger包的源码。前言 按组合并返回结果 ,比如菜单服务,接口一样,但有多种实现,用group区分,现在消费方需从每种group中调用…

当使用vim时遇到Taglist: Exuberant ctags (http://ctags.sf.net) not found in PATH. Plugin is not loaded.

用vim编辑器时出现提示: Taglist: Exuberant ctags (http://ctags.sf.net) not found in PATH. Plugin is not loaded. 原因:taglist plugin不能找到ctags 程序解决方案:1.删除.vim文件夹下的相关文件:plugin/taglist.vim和doc/ta…

汇总这一年半我所使用过的那些工具

前言 马上要回家过年了,来总结下之前自己所使用过的那些工具吧。不论是在工作,还是日常的工作学习中,难免都会使用一些简单的小工具。但有时候一些工具只使用很短的时间,然后当第二次使用的时候,只记得当时使用过&…