C 函数传递指针参数注意事项
指针参数:这个问题也可以归结为内存泄漏。对于malloc的变量,free之后一定要置为NULL,这样我们就可以通过判断这个自增是否为NULL来编程。所以为了简单和不至于忘记最后的一个置NULL操作,我把这个过程写成了函数:
void mem_free(void *ptr)
{
if(NULL != ptr)
{
free(ptr);
ptr = NULL;
}
}
不仔细看没发现问题吧,把ptr的指针free掉,然后NULL操作,但是问题来了,当我为char *buff 执行mem_free(buff)函数后,发现第二次运行mem_free(buff)发现NULL != ptr竟然为true,郁闷了吧?这个问题搞了我半天时间,后来查看相关书籍才发现,当第一次mem_free的时候,free确实把内存给清除了,但是坏就坏在ptr = NULL;上,注意这个时候ptr只是一个指向buff指针的副本,也就是这个时候运行时态的指针可以理解成这样 ptr->buff->heap,free是因为没有改变ptr的指向,只是free掉了值,所以heap中的值被清除了,但是ptr = NULL,其实是切断了ptr –> buff的这根链,那么,buff ->heap这个链没有断开,所以其实buff还是指向这heap这个内存,虽然heap中已经不存在任何有用的数据了。但是我们的本意是要断开 buff –> heap这个链,所以这个函数应该写成传递二级指针:
void mem_free(void **ptr)
{
if(NULL != *ptr)
{
free(*ptr);
*ptr = NULL;
}
}
这个问题可以总结为:改变指针指向的内容不需要传递指针地址,改变指针的指向,一定要传递指针的地址。
C 函数传递指针参数注意事项相关推荐
- c6011取消对null指针的引用_C++| 函数的指针参数如何传递内存?
函数的参数是一个一级指针,可以传递内存吗? 如果函数的参数是一个一级指针,不要指望用该指针去申请动态内存. 看下面的实例: #include using namespace std; void Get ...
- 函数传递的参数是原参数的副本
函数的传递的参数是原参数的副本 使用C语言编程,不可能不用到函数,但是函数的参数传递,我们是否真的清楚了呢.本文主要介绍C语言中函数传递的参数.. 函数的参数通常分为两种,普通变量,指针变量.这些参数 ...
- JS与PHP向函数传递可变参数的区别
# JS 调用函数传递可变参数的方法 <script> function test() { for(var i =0;i < arguments.length; i++) { ale ...
- Python学习之路:函数传递可变参数与不可变参数
函数传参的方法: 太基础了,8说了 直接上重点 一.可变参数的传递 可变参数有:列表.集合.字典 直接上代码: a = [1, 2]def fun(a):print('传入函数时a的值为:', a)a ...
- c python 传参数 数组_python函数传递数组参数吗
函数是任何一门编程语言都不可缺少的,而且也是非常重要的一部分.Python中函数的参数,可以分为以下几类: 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数 ...
- C++和Java函数传递数组参数比较
如果我想实现函数参数传递数组的业务需求,在Java中很容易实现,如下所示.因为Java有.length方法,可以获取数组的长度. public class Test {public static vo ...
- html表格怎样传入数据类型,Echarts图表中pie类型tooltip中formatter函数传递的参数从哪里来?...
最近参与一个项目遇到一个问题,这个tooltip提示框信息怎么配?找了好久最终配置成功,分享到这里大家共享一下,能节省不少时间 首先可以看一下系统介绍的文章,里面知识点比较多,也有注释,讲的很全,推荐 ...
- python数组做参数_python函数传递数组参数吗
函数是任何一门编程语言都不可缺少的,而且也是非常重要的一部分.Python中函数的参数,可以分为以下几类: 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数 ...
- python strptime函数_关于python:datetime.strptime不接受自定义函数传递的参数
我正在尝试创建一个可重用的def函数,以将熊猫数据框列中的儒略日期转换为格里高利风格的日期. 使用该函数时,出现TypeError:strptime()参数1必须是str,而不是Series. imp ...
最新文章
- Python单元测试--使用装饰器实现测试跳过和预期故障
- 初学C++正则表达式(regex)
- Java技术分享:Lambda表达式之接口实例化
- 列表排序并返回索引_Python特性—列表,看完你就能轻松驾驭,拿走不谢
- 常见性能优化小技巧原理
- linux/unix 段错误捕获【续】
- RealWave Surfaces 泡沫
- 用python玩转数据测试与作业_大学mooc用Python玩转数据章节测试答案
- axios post参数为空
- python机器学习——文本情感分析(英文文本情感分析)
- Houdini定义属性方式
- 用于温度测量的热敏电阻
- Java基于POI动态合并单元格
- 在线学习编程网站收集
- java牛奶订购系统,Java IO系统
- Physics.OverlapSphere
- Scrapy翻页爬取示例——列表页、详情页
- 【验证狼人杀三行定律】
- 节日EDM系列:圣诞节如何进行EDM数据营销
- cv2.cvtColor(image,cv2.COLOR_RGB2BGR) opencv颜色空间的转换