您的位置:首页 > 编程语言 > C语言/C++

如何避免野指针(详解)

2016-07-18 20:04 190 查看
野指针:随机指向内存中的一个地址,对于这个地址不一定有访问权,会导致内存泄漏(访问了已经释放的内存,或没有访问权限)。

下面这个程序很好的避免了野指针:

#include <stdio.h>
#include <stdlib.h>
//#define NULL (void *)0  //(void *0) 是0地址,是不允许操作,不允许访问的。
#define MAX_SIZE sizeof(char) * 100
//memset  bzero

int main()
{
    char *ptr = (char *)malloc(MAX_SIZE);//必须是相同类指针类型赋值,否则有可能会越界。

    if(NULL == ptr)
    {
        printf("malloc error!\n");
        exit(1);
    }

    //memset(ptr,0,MAX_SIZE);
    bzero(ptr,MAX_SIZE);
    
    scanf("%s",ptr);
    
    printf("ptr = %s\n",ptr);
    
    free(ptr);
    
    ptr = NULL;
}
如何避免野指针:
(1)当指针没有做初始化,即没有指向时,将指针指为NULL。一方面可以提醒自己这个指向NULL的指针不可操作不可访问,另一方面NULL这个标记便于我们检查和避免野指针;
初始化为NULL的目的:一是出现段错误时易改错,二是(void *0) 是0地址,是不允许操作,不允许访问的。
(2)当想给指针赋值时,检查是否已经给他分配了内存空间,如果没有分配就再用malloc分配;
(3)给指针分配完内存后,不使用时再用free()函数清空内存空间(清空原来的缓冲区),并再将指针指为NULL。
注:void * 为万能指针,可以接收任何类型的指针,但是不能对其取值(不能对他指向的空间进行操作,他只能暂时存放地址)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 野指针 C语言