1130笔记

野指针的管理与预防
本文详细介绍了野指针的概念及其潜在危害,并提供了几种有效的规避策略,包括指针初始化、内存分配检查、内存初始化及释放等,帮助开发者提高代码质量。


野指针的定义:随机指向一块内存的指针称为野指针。(成因:因为在计算机中,内存的分配由操作系统来管理,要使用内存需要先向操作系统申请,系统分配后才可以使用,而野指针的内存空间是随机分配的,属于非法访问内存。)

野指针的危害:容易导致内存泄漏,即失去对内存的控制导致内存的浪费,在程序运行时由于非法访问内存会产生段错误,但是野指针不一定每次都产生段错误,因为有的时候系统分配给野指针的内存是其他变量申请过的,被分配过的,此时野指针使用该内存就会被当做合法使用内存。

野指针的规避:

想要规避野指针,要养成一些良好的编码习惯:

1、当一个指针没有指向时一定要置为空,即指向NULL,因为NULL是一个零地址,系统规定不可以对零地址进行操作。其实置为空是无法彻底避免野指针的,置为空只是提醒编程者该指针是野指针,不可以对其进行赋值或其他操作。

2、当要往一个指针指向的空间赋值时,一定要检查是否已经给该指针分配空间,一定要确保已经分配空间。分配空间可以用malloc函数,例如int* p = malloc(size of (int)),这里要说明一下为什么赋值的不是int数据类型的字节长度4。因为在不同平台上,整型的字节长度可能不一样,如果分配的是4,那么当程序在其他平台执行时,整形数据长度可能就不是四个字节,会带来不必要的麻烦。以这种方式写可以保证无论在什么平台分配的都是整型数据的字节长度,从而提高了代码的移植性。

3、当给一个指针分配了空间后一定要检查是否分配成功,因为malloc并不一定百分之百生效,可以执行如下程序进行检查:

if(p == NULL)

{

    printf("malloc error!\n");

    exit(1);//跳出整个程序

}

4、malloc分配空间成功后再使用这块空间之前要进行该空间的初始化,因为如果不进行初始化可能会有之前的垃圾数据残留,影响程序。可以用memset(p,0,sizeof(int));memset会将p指向的空间都置为0。

5、使用完之后要用free(p)释放内存空间。

6、释放空间之后一定要再次将p置为空,否则p会再次成为野指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值