不懂不要误人子弟----一个面试时棘手的问题

在梅边 2012-04-18 03:22:54
祈祷:希望CSDN的大牛们能帮我解决这个问题

小弟自从毕业后经过无数的面试,总结出来几个问题,这个是技术类公司非常关注的问题,也是非常棘手的问题,我感觉这个问题如果能抓住核心说出关键的内容,会在技术面试中扔下一颗重磅炸弹,也使你获得工作有相当的砝码


问题1:如何处理内存溢出和内存泄露?这个问题首先,内存的泄露导致原因是分配内存的指针丢失,也就是通俗的没有free掉,然而这个问题如何查找、解决?不知道各位大牛的公司的程序是如何处理的,我们公司的就告诉我写的时候自己注意,我觉得这个肯定不是面试者想问出来的。而内存的溢出在具体是什么原因导致?会有什么影响?一般各位大牛们的公司的程序回是什么原因出现内存的溢出?在小弟的理解上内存的溢出就是物理内存不够用

问题2:如何处理踩内存的问题?也不知道是我们公司的程序太成熟还是怎么回事,我从来没有遇到过踩内存的情况,然而这肯定不能作为问题的解答,我希望有经验的大大们能分享一下经验

这个问题是C语言相关的面试中最常被问到的问题,也一直是困扰我的问题,真心祈祷大牛们能分享一下!
也可以QQ交流下1181291424
...全文
3013 点赞 收藏 51
写回复
51 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chris君 2012-10-20
踩内存。。。这不是我们一直说的么。。。

说白了就是访问非法地址啊。。。

指针越界,数组长度溢出神马的。。。
回复
TonyXQQ 2012-04-23
用那个vld,但有时还是查不出来,这时只好在整工程查找分配内存的地方来解决
回复
在梅边 2012-04-23
[Quote=引用 25 楼 的回复:]

踩内存???想起了星际那个年代的事情,大白球,大红球?还有拳皇里面的电神,火神。。。好歹是工作,专业一点嘛,不要自己发明名词
[/Quote]

其实这是面试官用的词,我就是转述,那个人是华为的。。。
回复
wugui414 2012-04-23
公司规定:1.尽量减少使用动态内存分配
2.迫不得已的场合下使用了malloc,在使用完之后立刻释放内存
回复
seRookie 2012-04-22
我也用Valgrind查内存泄露和数组越界,不过还只会用最基本的memcheck功能……
回复
schlafenhamster 2012-04-22
用一个数组:
分配时把申请的内存记下来,
释放时同时把数组中的指针清零。
程序退出时检测这个数组,指针不为0的,要释放。
这种办法对于移植的代码,不知道具体分配的时候很有用
回复
menzi11 2012-04-21
我所知道的检测内存的常见手段:

0.各种形式的智能指针
1.为全局new和delete添加计数器.
2.如果是C++,重载类的new和delete添加针对该类的计数器
3.文档明确,例如函数中若创建新对象,一定要明确告知使用者该对象自动销毁还是用户销毁
4.自己注意点...
回复
fangjianocean 2012-04-21
C语言开发,公司不让动态分配,看来是技术不行或者程序暂用的内存不需太大又或者服务器太好了,不存在内存不足的情况。总之目前还没碰到类似问题。。。
指针乱指(野指针)的问题到时碰到过,watch之。
回复
cp298674954 2012-04-20
http://baike.baidu.com/view/45520.htm
回复
Defonds 2012-04-20
内存溢出
回复
jianshiku 2012-04-20
[Quote=引用 37 楼 的回复:]
啊,健壮性就健壮性么,整个什么鲁棒性,Robust也好啊,鲁棒鲁棒,让人看到就想到山东大棒,不明就里
[/Quote]
呵呵,山东大棒,有意思啊。
回复
cbzjzsb123 2012-04-20
啊,健壮性就健壮性么,整个什么鲁棒性,Robust也好啊,鲁棒鲁棒,让人看到就想到山东大棒,不明就里

回复
xingqiba0418 2012-04-20
我是来膜拜楼上的神牛的。。
回复
cnfixit 2012-04-19
[Quote=引用 9 楼 的回复:]
内存池,自己写回收系统,没free,神都帮不了你,如果可以,相信ms早就弄了

踩内存,这种名词,让我想到了,当年读书时,老师讲的鲁棒性,唉

memmove
[/Quote]

是啊,健壮性就健壮性么,整个什么鲁棒性,Robust也好啊,鲁棒鲁棒,让人看到就想到山东大棒,不明就里
回复
赵4老师 2012-04-19
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
回复
assassin5616 2012-04-19
踩内存???想起了星际那个年代的事情,大白球,大红球?还有拳皇里面的电神,火神。。。好歹是工作,专业一点嘛,不要自己发明名词
回复
yanran_hill 2012-04-19
第一个问题:处理内存泄露,最好的方式是尽可能的在栈上分配空间,而不是在堆上,也就是所尽可能使用局部变量,使用数组而不是使用指针,并且动不动就new 或者malloc。
如果非要使用指针并且new操作的话(如果采用了上面的方案,这样的代码段应该不多了),可以使用autoptr的方式,对变量进行引用计数的保护,当引用数为0时,自动释放。这样做的效果的好坏,将依赖于autoptr是否强悍。

回复
XNightSky 2012-04-19
路过,学习
鲁棒性这名词第一次看到的时候感到非常囧。
回复
zmkkobe 2012-04-19
跟着牛人来学学。呵呵
回复
[Quote=引用 25 楼 的回复:]
踩内存???想起了星际那个年代的事情,大白球,大红球?还有拳皇里面的电神,火神。。。好歹是工作,专业一点嘛,不要自己发明名词
[/Quote]
呵呵,其实只是memory corruption的一种中文翻译而已,还是比较通用的.
这些问题一直没什么好的解决办法,分配内存时加magic code,用计数器等等,都要牺牲一定的性能.
回复
加载更多回复
相关推荐
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2012-04-18 03:22
社区公告
暂无公告