返回局部变量或临时变量的地址_值传递和地址返回两者在堆区(Heap)应用的三种易错点...
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)应用的三种易错点...相关推荐
- java传递地址_java 值传递及地址传递(引用传递)
一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前的理解,java中基本数据类型是值传递,对 ...
- 返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针
很多童鞋在编写函数返回指针的时候,常常会出现一些列内存错误.当然这可能是很多原因造成的,但是有一个原因就是返回的是局部变量的指针.先给出结论C++的函数不可以返回局部变量的指针. 首先要明确局部变量的 ...
- java include 传递对象_变量的值传递,地址引用(和对象成员变量、局部变量创建和初始化的内存机制)...
变量的值传递,地址引用(和对象成员变量.局部变量创建和初始化的内存机制) 变量的值传递,地址引用: 搞懂=含义,=即指向,看指向的内存块是否发生改变,还有是否是新内存块, 通过指向可以控制内存块的值. ...
- java 引用传递_详解java的值传递、地址传递、引用传递
详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...
- Python 值传递与地址传递总结
文章目录 一.复习巩固 1.值传递 2.地址传递 二.代码实例讲解: 三.归纳总结 一.复习巩固 首先我们复习一下什么叫做值传递,什么叫做地址传递 1.值传递 在实参向形参传递的过程中,传递的只是实参 ...
- java形参和实参的三种传递方式(值传递,地址传递,引用传递)
博客 博客 值传递:对形参的修改不会影响到实参 引用传递:对形参的修改会影响实参 一.值传递 在主函数中 #include <iostream> using namespace std;v ...
- 【❗划重点!C语言函数参数传递只有两种方式(值传递,地址传递),不支持“引用传递”!❗】
引子 上篇文章<C语言函数传参の结构体数组篇>提到了C语言的函数参数传递方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,"值传递和地址传递"是毫无疑问 ...
- C语言函数传递方式-值传递和地址传递
C语言函数传递方式 值传递 定义 所谓的值传递,顾名思义就是使用变量.常量.数组等作为函数的参数.实际是将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储单元. 特点 值传递的特点是 ...
- c语言中的值传递和地址传递参数,c语言值传递,地址传递,引用传递
c语言值传递,地址传递,引用传递 总结:对于函数来说,值传递就是一个人来了,给你一些数 据,你对数据处理.地址传递就是你通过地址找到一个人,然后直接对这个人处理.而引用传递就是你要直接对一个人进行处 ...
最新文章
- [Unity WWW] 跨域访问解决方法
- 3D Slicer画病灶可能产生的问题+核磁共振影像数据处理-14-3d slicer画病灶“三宗罪”|常见bug(错误)汇总
- 扩展SpringMVC以支持绑定JSON格式的请求参数
- 现代制造工程笔记04-精密超精密加工和特种加工(主要掌握加工原理加工条件)
- protractor端到端测试简介
- 消息中间件--RabbitMQ ---TTL队列/消息
- java sipush_003-整型入栈指令(iconst、bipush、sipush、ldc)
- java.lang.VerifyError: Expecting a stack map frame
- 汉王考勤管理软件mysql数据库配置_求汉王考勤软件数据库表结构
- Vijos P1199核弹危机
- 【菜鸟学Java】1:Java语言简介
- 《逻辑:你认为正确,就一定正确吗?》
- 云计算机ppt模板,云服务云技术云计算PPT模板
- linux环境使用c语言获取当前目录下有哪些文件,并打印它们的名字
- 【重磅】英国脱离欧盟,英国首相卡梅伦宣布辞职
- Android8怎么格式化内存卡,安卓手机怎么格式化存储内存 Android手机SD内存卡格式化方法...
- 电脑键盘上各个键的作用
- 怎么在线把pdf文件合并
- 小游戏-4339-4399
- 云台山风景区茶园骑共享单车,游玩茶园的每一个角落