c语言==野指针形成原理、造成的危害及避免方法(22)

野指针 : 随机指向一块内存的指针成为野指针。(因为在计算机中,内存的分配由操作系统来管理,要使用内存需要先向操作系统申请,系统分配后才可以使用,而野指针的内存空间是随机分配的,属于非法访问内存。)
野指针造成的错误叫做内存泄漏,但存在野指针并不一定每次运行程序都会出现段错误,因为可能某次给野指针随机分配的内存地址是其它变量已经申请过的内存地址,这种情况不会出现段错误。
怎样避免野指针 :要养成良好的编码习惯 。
1、定义指针时如果没有初始化,就让它指向NULL,置为空的指针,不能给这个指针所指向的空间做操作。(因为NULL是一个零地址,系统规定不可以对零地址进行操作。其实置为空是无法彻底避免野指针的,置为空只是提醒编程者该指针是野指针,不可以对其进行赋值或其他操作。)
2、当要向一个指针指向的空间赋值时,一定要检查有没有给这个指针分配空间。方法如下:
int* p = malloc(size of (int))
if(p == NULL)
{
printf(“malloc error!\n”);
exit(1);//跳出整个程序
}

        /*这里要说明一下为什么赋值的不是int数据类型的字节长度4。因为在不同平台上,整型的字节长度可能不一样,如果分配的是4,那么当程序在其他平台执行时,整形数据长度可能就不是四个字节,会带来不必要的麻烦。以这种方式写可以保证无论在什么平台分配的都是整型数据的字节长度,从而提高了代码的移植性。*/
3、当给一个指针分配空间时,要检查下有没有分配空间。
4、将分配的内存空间初始化。因为如果不进行初始化可能会有之前的垃圾数据残留,影响程序。可以用memset(p,0,sizeof(int));memset会将p指向的前sizeof(int)空间都置为0。
5、用完后把内存还给系统(释放)
6、释放完后再将指针指向NULL,否则p会再次成为野指针。
#define NULL (void *)0   //NULL指向零地址,不允许对0地址对应的空间做操作。

malloc()函数,形参为要分配的字节大小,返回为这段空间的首地址。
eg : malloc(4)和malloc(sizeof(int)) 后者提高了移植性。
memset(p,0,sizeof(int)) 把p指向的空间全部初始化为0
free(p)释放。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值