指针参数:这个问题也可以归结为内存泄漏。对于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 函数传递指针参数注意事项相关推荐

  1. c6011取消对null指针的引用_C++| 函数的指针参数如何传递内存?

    函数的参数是一个一级指针,可以传递内存吗? 如果函数的参数是一个一级指针,不要指望用该指针去申请动态内存. 看下面的实例: #include using namespace std; void Get ...

  2. 函数传递的参数是原参数的副本

    函数的传递的参数是原参数的副本 使用C语言编程,不可能不用到函数,但是函数的参数传递,我们是否真的清楚了呢.本文主要介绍C语言中函数传递的参数.. 函数的参数通常分为两种,普通变量,指针变量.这些参数 ...

  3. JS与PHP向函数传递可变参数的区别

    # JS 调用函数传递可变参数的方法 <script> function test() { for(var i =0;i < arguments.length; i++) { ale ...

  4. Python学习之路:函数传递可变参数与不可变参数

    函数传参的方法: 太基础了,8说了 直接上重点 一.可变参数的传递 可变参数有:列表.集合.字典 直接上代码: a = [1, 2]def fun(a):print('传入函数时a的值为:', a)a ...

  5. c python 传参数 数组_python函数传递数组参数吗

    函数是任何一门编程语言都不可缺少的,而且也是非常重要的一部分.Python中函数的参数,可以分为以下几类: 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数 ...

  6. C++和Java函数传递数组参数比较

    如果我想实现函数参数传递数组的业务需求,在Java中很容易实现,如下所示.因为Java有.length方法,可以获取数组的长度. public class Test {public static vo ...

  7. html表格怎样传入数据类型,Echarts图表中pie类型tooltip中formatter函数传递的参数从哪里来?...

    最近参与一个项目遇到一个问题,这个tooltip提示框信息怎么配?找了好久最终配置成功,分享到这里大家共享一下,能节省不少时间 首先可以看一下系统介绍的文章,里面知识点比较多,也有注释,讲的很全,推荐 ...

  8. python数组做参数_python函数传递数组参数吗

    函数是任何一门编程语言都不可缺少的,而且也是非常重要的一部分.Python中函数的参数,可以分为以下几类: 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数 ...

  9. python strptime函数_关于python:datetime.strptime不接受自定义函数传递的参数

    我正在尝试创建一个可重用的def函数,以将熊猫数据框列中的儒略日期转换为格里高利风格的日期. 使用该函数时,出现TypeError:strptime()参数1必须是str,而不是Series. imp ...

最新文章

  1. Python单元测试--使用装饰器实现测试跳过和预期故障
  2. 初学C++正则表达式(regex)
  3. Java技术分享:Lambda表达式之接口实例化
  4. 列表排序并返回索引_Python特性—列表,看完你就能轻松驾驭,拿走不谢
  5. 常见性能优化小技巧原理
  6. linux/unix 段错误捕获【续】
  7. RealWave Surfaces 泡沫
  8. 用python玩转数据测试与作业_大学mooc用Python玩转数据章节测试答案
  9. axios post参数为空
  10. python机器学习——文本情感分析(英文文本情感分析)
  11. Houdini定义属性方式
  12. 用于温度测量的热敏电阻
  13. Java基于POI动态合并单元格
  14. 在线学习编程网站收集
  15. java牛奶订购系统,Java IO系统
  16. Physics.OverlapSphere
  17. Scrapy翻页爬取示例——列表页、详情页
  18. 【验证狼人杀三行定律】
  19. 节日EDM系列:圣诞节如何进行EDM数据营销
  20. cv2.cvtColor(image,cv2.COLOR_RGB2BGR) opencv颜色空间的转换

热门文章

  1. 2013手机App发展趋势预测:遇冷和洗牌
  2. 不是之所以不是,所以不是
  3. hdu 5367(线段树+区间合并)
  4. list中的linkedlist的用法
  5. 二叉苹果树(树型DP+背包)
  6. 第二章 Vue快速入门-- 28 自定义按键修饰符
  7. LCA+差分【p4427】[BJOI2018]求和
  8. Codevs 1519 过路费(Mst+Lca)
  9. Android应用开发基础篇(1)-----Button
  10. 经典网页设计:10个响应式设计的国外购物网站