C——野指针

重点内容
野指针未经初始化的指针,因为是一个局部变量,存储于栈空间,地址由系统随机分配。易造成内存泄漏错误,程序编译执行时出现的段错误原因之一便是由于在程序中存在野指针。

如何避免野指针?

养成良好的编码规范:
(1)、当指针未确定指向时,要将其初始化为空:NULL(零地址,不能对其进行操作和赋值),这样能够在出现段错误时引起编程人员的注意,以便发现问题。

(2)、当向指针指向的内存空间赋值时,要先确定其是否分配空间,若未分配空间要先对其分配空间:使用malloc()  例:char *ptr = malloc(100);    malloc(100)返回值是所分配空间的地址。
    char *ptr = (char *)malloc(sizeof(char) * 100);

注意:出现不兼容指针类型赋值原因是:指向不同数据类型的指针之间进行赋值。(char *)保证两个指针之间类型相同。

void *------万能指针,可保存任何类型指针的值,但不能对其进行取值操作

(3)、进行分配空间后要检查空间分配是否成功(以ptr为例),若不成空则ptr为空,要退出程序;
int main()
{
    char *ptr = (char *)malloc(sizeof(char) * 100);
    if (ptr == NULL)
    {
        printf("malloc error!");
        exit(1);

    }   

    scanf("%s",ptr);
    printf("%s",ptr);

    return 0;
}

(4)、分配空间使用完之后要进行清空
        memset(空间地址,要插入的字符,空间尺寸)

(5)、用完空间要释放:
            free(ptr);

(6)、释放后要将其重置为空:
        ptr = NULL;

例:`
int main()
{
    int *a[3]; //指针数组,注意对里面的指针元素分配空间;避免出现野指针
    int i;
    for(i = 0; i < 3; i++)
    {
        a[i] = (int *)malloc(sizeof(int) );//malloc分配空间
        if(a[i] == NULL)     //判断空间是否分配成功
        {
            printf("malloc error!");
            exit(1);
        }

        scanf("%d",a[i]);
    }

    for(i = 0; i < 3; i++)
    {
        printf("*a[%d] = %d\n",i, *a[i]);
        free(a[i]);          //  释放分配的空间
        a[i] = NULL;         //  将释放的空间置为零地址
    }

    return 0;
}`


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值