野指针和free总结超有用

36 篇文章 0 订阅
24 篇文章 0 订阅

在C语言项目中,经常会遇到需要程序员手动分配内存的地方。这样做能够节省大量的内存空间,也让程序更加灵活。只要你有一定的基础,那么肯定用过 malloc 或者 ralloc和free的组合。这个组合使用起来有一个需要注意的地方,不知道你有没有发现。
野指针是什么?
根据百度百科的说法,野指针是指 指向一个已删除的对象或未申请访问受限内存区域的指针.
我这里是这样理解的,野指针就是指向的内存区域不合法,这里的不合法主要包括以下几个方面:

  1. 所指向的内存未申请
    2.所指向的内存被释放
    当你访问一个未申请的内存区域时,系统会判定我们没有权限,无法访问。内存被释放后你再访问,结果完全不可预知,很大几率会出现段错误(segmentation fault),这是提示你访问越界了。
    野指针怎么出现的?
    在代码中以下几种情况会出现野指针:
    1.指针声明后未初始化
    这种情况下编译器一般会给出一个 warning警告,自己要注意避免。
    2.指针指向的空间被free后,没有被重置为NULL,或者指向一个有效的内存区域、
    在free后要及时处理被free的指针,例如令其指向NULL。
    野指针该如何避免?
    1.在指针声明时,要养成将其初始化的习惯。如下:
    int *p = NULL;
    默认将其初始化为NULL
    2.在free后面,加上重置指针的代码,如下:
    free§;
    p = NULL;
    重置为NULL
    为了便于理解,下面贴上一份代码:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

int main(int argc,char *argv[])
{

char *p = NULL;  //初始化为NULL
p = (char *)malloc(100);
if(p==NULL)
{
	return 0;
}
strcpy(p,"12321323213");  //向内存拷贝值
printf("p : %s\n",p);     //打印值

if(p!=NULL) 
{
	free(p);
	p = NULL;  //在释放完后,再将指针的值置为空
}

//free释放的是指针所指向的内存空间,而不是指针的值。
//所以释放后指针还是指向原来的地址
if(p1!=NULL)
{
	free(p1);  //如果再次释放,就会出现野指针错误。
}
getchar();
return 0;

}

参考学习资料
指针
http://www.makeru.com.cn/live/1392_238.html?s=45051
C语言控制led灯
http://www.makeru.com.cn/live/1392_304.html?s=45051
输入和输出
http://www.makeru.com.cn/live/1758_312.html?s=45051
C语言玩转链表
http://www.makeru.com.cn/live/1392_338.html?s=45051

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值