野指针

昨天在写完一个函数后,因里面用了很多指针操作, 写完后就回过头来检查,结果发现了一个”野指针”, 另我非常奇怪的是,这个”野指针”被我再次使用,程序运行居然没有问题.


就是这个疑问, 引发了我写这篇文章.


先说说什么是“野指针“。首先”野指针”的概念只会出现在像C和C++这种没有自动内存垃圾回收功能的高级语言中, 所以java或c#肯定不会有野指针的概念. 当我们用malloc为一个指针分配一个空间后, 用完这个指针,把它free掉,但是没有让这个指针指向NULL或某一个特定的空间. 比如:

char *pTemp = (char *)malloc(sizeof(char)*255);

free(pTemp);

上面两段代码执行后, temp就变成一个”野指针”了. 如果再次用这个指针,比如下面这样:

strcpy(pTemp, “aaaa”);

就是不对的.

 

记得刚学C语言那会儿, 看了很多遍林锐博士的<<高质量C++/C编程指南>>, 生怕漏掉了什么细节,写出不健壮的代码, 所以我牢记里面讲到, “野指针”是不能再次复用的, 但是我昨天不小心用了一个”野指针”(类似上面的代码那样), 运行居然没有问题. 到底是怎么回事呢? 要解答这个问题,有必要对”野指针”做更深入的思考.

 

Windows系统有4G的虚拟内存空间,系统各2GB的两部分,高部分是系统本身的,低部分是用户进程空间. 而且每一个进程与其它进程间是隔离的, 互不影响.


当一个指针成为“野指针”时,它指向哪里就是不可预知的了. 当你用了一个指向不可预知的指针时,即使程序运行没有问题, 那也是非常危险的. 因为这个”野指针”指向的内存空间,可能是某个重要的数据或其它程序,甚至是系统的重要内存位置. 这样造成的危害是不可预知的,这个不可预知包括危害程度的不可预知和危害时间的不可预知的. 像一颗不知何时会爆的定时炸弹.

 

另外, “野指针”还有一个危害,很少为人所知, 就是如果一个程序里有”野指针”, 容易被病毒或黑客攻击. 原理很简单,在这个”野指针”指向的内存中放点有害的东东, 你使用这个”野指针”时,自然中招.

 

为了避免出现”野指针”, 记住以下两点.

创建一个指针时, 马上让它指向一个特定的合法位置或置为NULL.比如:

char *pTemp = (char *)malloc(sizeof(char)*255);或char *pTemp = NULL;

释放一个指针后, 马上把它置为空,下次用时再重新分配空间.   

   本文摘自:http://q.sohu.com/forum/5/topic/46423375
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值