作者gamed (Maiko)
看板C_and_CPP
标题[问题] function 里的变数 存活时间
时间Thu Dec 21 22:46:04 2017
我朋友最近去面试
其中有一个主管考一题
char *fun()
{
char str[] = {"Hello"};
return str;
}
void main()
{
char *p = NULL;
p = fun();
printf("%s\n", p);
}
问结果如何
主管给的回答是这样可以把指标传出来
所以可以印出结果
我的观念是 function 的变数只要离开回圈
都会被归还OS(除了malloc)
我的想法对吗?
我在公司电脑(ubuntu)
的确可以印出字串 囧
但家里的电脑(ubuntu)却印出乱码
我有印出指标位址
的确可以把位址传出来
我後来想想
在公司电脑可以顺利印出字串
是运气好 刚好那段位址的内容没被覆盖??
如果想法有错误
请各位前辈能多给指导
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.177.11.95
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1513867566.A.E49.html
1F:→ stupid0319: 放在memory stack,大概是当前ebp-4的位置吧 12/21 22:54
2F:→ stupid0319: 而printf()中有区域变数的话,便会盖过去的样子 12/21 22:56
3F:推 holik0123: 这应该rodata吧 12/21 23:04
4F:→ stupid0319: printf含数的第一个区域变数有使用的用,str就被改了 12/21 23:06
5F:→ loveflames: 这例子跟rodata无关 12/21 23:10
6F:→ loveflames: 主管是要考你语言以外的底层机制吗,如果不是就很雷 12/21 23:12
7F:→ loveflames: 喔 12/21 23:12
8F:推 LPH66: 如果 fun() 里改成 char *str = "Hello"; 才可能跟 rodata 12/22 02:21
9F:→ LPH66: 有关, 这边这个写法是确定一定是区域阵列变数 12/22 02:22
10F:推 boss0405: 哪家主管啊...基本观念耶... 12/22 13:21
11F:→ loveflames: 如果是考语言以外的底层机制,那主管或许很神 12/22 13:34
12F:→ loveflames: 但如果不是,这公司不去为妙,太雷 12/22 13:34
13F:→ Schottky: 我不知道你们会不会,但我被考这题一定会问为什麽要这样 12/22 13:42
14F:→ Schottky: 考,顺便问一下贵公司是不是常这样写,看看面试官程度 12/22 13:42
15F:→ Schottky: 有趣的是... 面试官常常一问三不知,只说题目是从网路上 12/22 13:43
16F:→ Schottky: 找来的,正确答案就是这样但为什麽他不知道。耶嘿~ 12/22 13:44
17F:→ hylkevin: 题目应该char *str[] = {"Hello"}; return str[0];才对 12/22 15:00
18F:→ hylkevin: 吧? 12/22 15:00
19F:推 b0920075: 编译预设是开启canary,所以ebp - 0x4应该会放canary才 12/22 15:39
20F:→ b0920075: 对XDDD 12/22 15:39
21F:推 jasonwu23: 考这种另类智力测验实在没什麽营养 12/22 18:47
22F:→ nullptr: 块陶啊 01/04 19:34