(补)野指针

什么是野指针

随机指向一块内存的指针,称为野指针。野指针容易引起内存泄露。 
非法访问:内存资源是由操作系统管理的,使用之前要向操作系统申请。野指针访问的那块内存空间可能是未向操作系统申请的内存空间,因为会被认为是非法访问。不是每次野指针都会报段错误,因为野指针获得的地址可能是已经向操作系统分配或申请过的变量的地址。

如何避免野指针

避免野指针,应该养成以下良好的编码习惯: 
1.当一个指针没有指向时,将它初始化为NULL。NULL是一个宏,(void *)0,是0地址,在操作系统中规定,不允许对地址为0的空间作操作(如赋值)。而将它初始化的目的是:引起程序员注意,不能对其作操作,因为在操作系统中不能对0地址作操作。 
2.当要往一个指针指向的内存空间赋值时,一定要给这个指针分配空间。

int *p = malloc(sizeof(int));
   
   
  • 1
  • 1

3.当给指针分配空间时,要检查分配空间是否成功。

if(p == NULL)
{
    printf("malloc error!\n");
    exit(1);
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

4.分配成功,使用这块空间之前,要对这块内存空间初始化。

memset(p,0,sizeof(int));//将p指向的内存空间全部初始化为0
   
   
  • 1
  • 1

5.用完之后,将这块内存空间释放,将其还给系统。

free(p);
   
   
  • 1
  • 1

6.空间释放完后,再次将指针指向空。因为这个指针又变成一个野指针。

p = NULL;
   
   
  • 1
  • 1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值