野指针的产生及其避免
野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。
总的来说,野指针是一种内存错误。其产生的原因主要有一下几点:
1:(访问了不该访问的内存);
如果我们的指针变量没有被我们初始化,系统会为我们的编译器随机为我们的指针指定内存。既然是系统随机的指定,那么我们在后面的取值或者取地址操作,都会是一个随机的内存中的值。这时候编译器会报段错误。
2;访问了已经释放的内存;
如果我们在一个指针变量的内存已经释放的时候去访问该内存或者改内存中保存的数据,我们就会出现错误。这时候编译器会报段错误。
如何避免野指针造成的内存泄漏?
1:在定义指针的时候,为我们的指针初始化为NULL;//如初始化为NULL (void *)0;(万能指针,其中的用法可以参考我的其他博客)
2:可以用malloc函数为指针分配堆空间,具体操作如下:
char *ptr = (char *)malloc (sizeof(char)* 100);
If(ptr == NULL)
{
printf(“malloc error “);
exit(1); //未分配成功提示退出程序
}
bzero(ptr,sizeof(char) * 100); //或memset(ptr ,’\0’,sizeof(char) * 100); 清空内存
scanf(“%s”,ptr);
printf(“ptr = %s\n”,ptr);
free(ptr); //用完释放
ptr == NULL; //释放后指向NULL,可以提示你。
以上就是个人的一些见解,希望可以帮到你。