野指针是指随机访问了内存空间,归根到底是由于不良的编码习惯,有个良好的编程习惯是避免“野指针”的唯一方法。
如何避免野指针:
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,但是也有没有分配成功的情况,要通过if(NULL == 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。
Memset与bzero的不同之处在于:memset可以用各种不同的值来填充,而bzero只能用0来填充。
4)清空完缓存之后就可以对这个指针赋值了
5)用完之后用free(ptr)来释放内存,同时还要对ptr赋NULL,即ptr = NULL;