免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 相逢的日子
打印 上一主题 下一主题

求虐待,求糟蹋! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-10-22 22:01 |只看该作者
回复 9# wangzhen11aaa


  是可能,不是一定

论坛徽章:
0
12 [报告]
发表于 2011-10-22 22:12 |只看该作者
可能面试官正好遇到过这个问题 哈哈

论坛徽章:
0
13 [报告]
发表于 2011-10-23 00:05 |只看该作者
本帖最后由 samon_fu 于 2011-10-23 00:09 编辑

看到上面几个人的帖子,个人感觉有理解错误的,特发一下个人的见解供大家参考,有错误的地方欢迎指正,以防误导大家:

每个进程(含main入口)有一套独立的堆栈空间,不是每个函数都有一个(注意到上面帖子有说每个函数一个)。这个栈用于调用函数时放置的参数、返回值,每个函数里面的临时变量啥的。

堆栈溢出这块,个人认为是这样:每个进程的栈空间是有大小上限的(具体大小值拿不准),试想如果程序无限嵌套,无限大容量做临时变量,那么就会把栈耗尽导致溢出。

而上面有人提到定义a[10],访问a[100000000000000]这样,程序运行结果可能是sagment fault,但个人认为这不是堆栈溢出,而是地址访问出错,也就说你这个进程执行的之后去访问不属于你的地址,那么操作系统会给你返回错误导致你程序停止。

所以,搞堆栈溢出,就是在函数调用上(多次,无限次调用,递归是绝佳的例子),压栈的数据结构上(参数、返回值、临时变量)上动脑筋就成了。

好久没发帖了,有错误的地方请大家指正。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
14 [报告]
发表于 2011-10-23 00:51 |只看该作者
那个面试官有病

他那里的,你给我联系方式,我去面一下,B4B4他

论坛徽章:
0
15 [报告]
发表于 2011-10-23 00:56 |只看该作者
回复 14# 塑料袋


    他不给你面试机会

论坛徽章:
0
16 [报告]
发表于 2011-10-23 01:42 |只看该作者
回复 13# samon_fu


   段错误和栈溢出还是有区别的。段错误是一种结果,栈溢出是一种行为

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2011-10-23 07:12 |只看该作者
看到上面几个人的帖子,个人感觉有理解错误的,特发一下个人的见解供大家参考,有错误的地方欢迎指正,以防 ...
samon_fu 发表于 2011-10-23 00:05
返回值不会放入堆栈吧。函数调用放入堆栈的只是当前调用者的状态,返回地址,传递的参数。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2011-10-23 07:13 |只看该作者
回复  samon_fu


   段错误和栈溢出还是有区别的。段错误是一种结果,栈溢出是一种行为
x5miao 发表于 2011-10-23 01:42

这都是两种结果,不同的行为导致的不同结果。

论坛徽章:
0
19 [报告]
发表于 2011-10-23 08:43 |只看该作者
这周我也遇到了这个问题,我只是偷懒,少写些代码,直接在栈中弄了一个很大的buf做处理,而在不同系统上得出得结果还不一致

论坛徽章:
0
20 [报告]
发表于 2011-10-23 10:13 |只看该作者
回复 9# wangzhen11aaa


数组越界!=栈溢出……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP