如何避免“野指针”

野指针是什么?

野指针就是未初始化的指针,然后系统会随机一个垃圾值地址,地址可能不可用。


野指针的危害:容易造成段错误,即内存泄漏。


避免野指针的方法

养成良好的编程习惯

1.当指针没有指向时把它置为空(NULL)

置为空并不是为了解决野指针,只是为了让编程人员在检查错误时可以轻易发现有一个指针没有初始化,继而解决问题。单纯的置为空并没有什么意义。

*a[i] = NULL;// 开始这样写,然后再删除掉NULL为它分配内存空间,每个都如此,如果后面出现错误,可以很轻易的看出是否有NULL残留。


2.像指针指向的内存空间赋值时检查指针是否分配了内存空间,若无则用malloc分配内存空间。

int *a[3];

int i;

for(i = 0; i < 3; i++)

{

    a[i] = (int *)malloc(sizeof(int));

}

其中的int*为强制类型转换,因为malloc的返回值为void*,不能确定类型,所以赋值时要做类型转换。需要转换为什么类型,就在括号里添加,malloc后面的括号里是需要分配的空间大小,这里的空间大小就是一个整形需要的空间。


3.检查malloc分配内存空间是否分配成功,若未分配,则发出提醒并退出程序。

if(a[i] == NULL)

{

    printf("malloc error!\n") //发出错误提醒

    exit(1); // 退出程序

}


4.使用memset()函数清空空间

memset(ptr,0,sizeof(char));


5.使用完之后要使用函数free()释放内存空间

for(i = 0; i < 3; i++)
{
    free(a[i]);
}


6.清理痕迹:ptr = NULL;


for(i = 0; i < 3; i++)

{

    printf("%d",*a[i]);// 输出结果

    free(a[i]); // 逐个释放内存空间

    a[i] = NULL;//逐个清理痕迹

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值