1、指针变量作为参数进行值传递给函数的形参,并在堆区(Heap)进行内存分配和赋值

程序源码:

1 

结果:
Segmentation fault (core dumped)

分析:

如上图,指针变量ptr进行值传递给函数allocation()的形参tmp并赋值为NULL,这里只是将指针ptr进行值传递即将NULL赋给tmp而不是指向tmp,所以ptr还是指向NULL,然后tmp在堆区(Heap)进行了内存分配并赋值为100,这里分配的堆区的内存地址为0xaabb,由于tmp是局部变量,在第13行执行完allocation()函数后位于栈区的tmp就会自动释放,但是tmp所指向堆区的内存空间0xaabb是不会释放的,只能手动释放(使用free()函数)或者等程序全部运行结束后才会释放,如果不释放的话就会造成内存泄漏,所以*ptr就相当于对野指针NULL进行取值。

2、指针变量先在堆区(Heap)分配内存空间,然后作为参数值传递给函数赋值

程序源码:

1 

结果:
*ptr = 100

分析:

如上图,指针变量ptr先在堆区(Heap)进行内存分配,地址为为0xaabb,接着将ptr的值也就是地址0xaabb作为参数进行值传递赋值给tmp,这里tmp也指向了0xaabb并对该地址赋值为100,执行完allocation(ptr)函数后因为tmp是局部变量存在于栈区,所以tmp就会自动释放内存,但是ptr依旧指向0xaabb,此时打印*ptr时由于之前tmp对ptr所指向的地址0xaab已经赋值为100了,所以*ptr就等于100。

3、在函数里对局部变量进行堆区(Heap)的内存分配和赋值,并返回该堆区空间的地址

程序源码:

1 

结果:
*ptr = 100

分析:

返回局部变量或临时变量的地址_值传递和地址返回两者在堆区(Heap)应用的三种易错点...相关推荐

  1. java传递地址_java 值传递及地址传递(引用传递)

    一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前的理解,java中基本数据类型是值传递,对 ...

  2. 返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针

    很多童鞋在编写函数返回指针的时候,常常会出现一些列内存错误.当然这可能是很多原因造成的,但是有一个原因就是返回的是局部变量的指针.先给出结论C++的函数不可以返回局部变量的指针. 首先要明确局部变量的 ...

  3. java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...

    变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...

  4. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

  5. Python 值传递与地址传递总结

    文章目录 一.复习巩固 1.值传递 2.地址传递 二.代码实例讲解: 三.归纳总结 一.复习巩固 首先我们复习一下什么叫做值传递,什么叫做地址传递 1.值传递 在实参向形参传递的过程中,传递的只是实参 ...

  6. java形参和实参的三种传递方式(值传递,地址传递,引用传递)

    博客 博客 值传递:对形参的修改不会影响到实参 引用传递:对形参的修改会影响实参 一.值传递 在主函数中 #include <iostream> using namespace std;v ...

  7. 【❗划重点!C语言函数参数传递只有两种方式(值传递,地址传递),不支持“引用传递”!❗】

    引子 上篇文章<C语言函数传参の结构体数组篇>提到了C语言的函数参数传递方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,"值传递和地址传递"是毫无疑问 ...

  8. C语言函数传递方式-值传递和地址传递

    C语言函数传递方式 值传递 定义 所谓的值传递,顾名思义就是使用变量.常量.数组等作为函数的参数.实际是将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储单元. 特点 值传递的特点是 ...

  9. c语言中的值传递和地址传递参数,c语言值传递,地址传递,引用传递

     c语言值传递,地址传递,引用传递 总结:对于函数来说,值传递就是一个人来了,给你一些数 据,你对数据处理.地址传递就是你通过地址找到一个人,然后直接对这个人处理.而引用传递就是你要直接对一个人进行处 ...

最新文章

  1. [Unity WWW] 跨域访问解决方法
  2. 3D Slicer画病灶可能产生的问题+核磁共振影像数据处理-14-3d slicer画病灶“三宗罪”|常见bug(错误)汇总
  3. 扩展SpringMVC以支持绑定JSON格式的请求参数
  4. 现代制造工程笔记04-精密超精密加工和特种加工(主要掌握加工原理加工条件)
  5. protractor端到端测试简介
  6. 消息中间件--RabbitMQ ---TTL队列/消息
  7. java sipush_003-整型入栈指令(iconst、bipush、sipush、ldc)
  8. java.lang.VerifyError: Expecting a stack map frame
  9. 汉王考勤管理软件mysql数据库配置_求汉王考勤软件数据库表结构
  10. Vijos P1199核弹危机
  11. 【菜鸟学Java】1:Java语言简介
  12. 《逻辑:你认为正确,就一定正确吗?》
  13. 云计算机ppt模板,云服务云技术云计算PPT模板
  14. linux环境使用c语言获取当前目录下有哪些文件,并打印它们的名字
  15. 【重磅】英国脱离欧盟,英国首相卡梅伦宣布辞职
  16. Android8怎么格式化内存卡,安卓手机怎么格式化存储内存 Android手机SD内存卡格式化方法...
  17. 电脑键盘上各个键的作用
  18. 怎么在线把pdf文件合并
  19. 小游戏-4339-4399
  20. 云台山风景区茶园骑共享单车,游玩茶园的每一个角落

热门文章

  1. Dubbo中负载均衡的应用
  2. 收货地址 - 设置默认收货地址
  3. Stream流中间操作方法
  4. SpringMVC的请求-文件上传-客户端表单实现
  5. springboot日志配置
  6. flume案例-文件数据采集-运行测试
  7. 201110阶段二qt事件
  8. Citrix VDI攻略之四:PVS安装及配置
  9. 事件监听一直报错Cannot set property 'display' of undefined
  10. 浅谈EntityFramework框架的使用