如何避免野指针?

野指针是指随机访问了内存空间,归根到底是由于不良的编码习惯,有个良好的编程习惯是避免“野指针”的唯一方法。

如何避免野指针:

1)初始化:char*p = NULL;(为何赋值为NULL:一是NULL是一个宏,高亮,检查段错误的时候比较显眼。二是NULL为值,不能对NULL值赋值或者访问。)

2)对指针赋值时,先检查是否分配内存,如果没有分配空间,用malloc分配内存。

 如:Char  *ptr

Ptr =  (char *)malloc(sizeof(char)*100);


3)malloc的返回值为void *,因为为char型指针,所以malloc要强制转换为char *型。虽然已经使用了malloc,但是也有没有分配成功的情况,要通过ifNULL == ptr)来判断是否分配成功。

分配好内存之后,但是也不排除会分配一个刚配释放的内存,所以需要清空缓冲区,通过memset函数或者bzero函数来清空。

Memset

       Memset(ptr,0,sizeof(ptr)),这个用法是错的,ptr是指针,sizeof(ptr)4个字节,而我们ptr该中往往不止4个字节。

        所以应该为(ptr , 0 , sizeof(ptr) * 100);这个是指ptr所指向的内存区中前N个字节用0字节填空。

 

Bzero:

Bzero(ptr,sizeof(char) * 100);这是说从ptr开始的100个字节全部置为0

Memsetbzero的不同之处在于:memset可以用各种不同的值来填充,而bzero只能用0来填充。

4)清空完缓存之后就可以对这个指针赋值了

5)用完之后用free(ptr)来释放内存,同时还要对ptrNULL,即ptr = NULL



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值