完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这段代码的结果一直让我无法理解,因为my_cpy函数中返回的dest指针指向的内容应该在函数执行完就释放了的,可是,编译这段代码后运行却发现主函数中的des指针竟然访问到了my_cpy函数中dest数组中的内容...而且奇怪的是,加a = strlen(des)或直接写strlen(des)结果也不相同,当strlen返回时,des指针指向的内存没有内容可以访问,而当strlen不返回时,却也能访问到dest释放之前的内容... 求大神指点....(这段代码肯定有些小的需要改进的地方,希望大家包涵)。 |
|
相关推荐
5个回答
|
|
这是在linux下运行的,在windows下运行就不会出现这种情况...
|
|
|
|
怎么都没人回个帖呢?大神都去哪儿了?
|
|
|
|
不知道你是在X86还是在其他平台的linux环境下运行,是x86的话就可以继续往下看。
在x86下,CC++在堆栈上分配临时变量需要的空间,使用临时变量的函数返回后,严谨的说程序就不能访问这些变量; 但是你的程序返回的是这些临时变量的指针(临时变量的物理内存地址),你仍然可以在编译检查不完全的情况下用这个指针访问函数返回前使用的临时变量地址; 但是此时访问的内容是没有保证的,如果没有代码对堆栈中的这些内容进行破坏(调用其他函数时其他函数未分配你访问的这个地址空间作为临时变量)那么你仍然可以访问到你期望的内容;如果有破坏(如你调用strlen、或系统产生中断,将中断返回地址压入堆栈)您访问到的就不是你期望的内容。 |
|
|
|
意思就是说这是因为不同的平台,所以才造成不同的访问结果...而且还包括是否存在代码对原来空间的破坏...感觉这样一理解我就通了许多...真的好感谢你的回复,我才接触linux不久,以后可以多向你请教和学习么? |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4867 浏览 0 评论
87352 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4673 浏览 2 评论
3565 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2450 浏览 0 评论
1946浏览 3评论
这是i.mx6ull的关于usb的宏定义,能解释下这些宏定义的意思
1316浏览 1评论
1221浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1289浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1207浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 00:32 , Processed in 1.091457 second(s), Total 55, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号