C语言指针——野指针

目录

概念

原因

1、指针未初始化

2、指针越界访问

3、指针指向的空间释放

如何规避野指针

1、指针初始化

(1)、不知道指针初始化什么地址时,直接初始化为NULL

(2)、明确知道初始化的值

2、小心指针越界

3、指针指向空间释放即时置NULL

4、指针使用之前检查有效性


概念

指针指向的位置是不可知的(随机的、不确定的、没有明确限制的)

原因

1、指针未初始化

cpp 复制代码
#include<stdio.h>
int main()
{
    int* p;     //局部变量指针未初始化,默认为随机值
    *p=20;
    return 0;
}

2、指针越界访问

cpp 复制代码
#inlcude<stdio.h>
int main()
{
    int arr[10]={0};
    int *p=arr;
    int i=0;
    for(i=0;i<=11;i++)
    {
        //当指针指向的范围超出数组arr的范围时,p就是野指针
        *(p++)=i;    
    }
    return 0;
}

3、指针指向的空间释放

cpp 复制代码
#include<stdio.h>
int* test()
{
    int a=10;
    return &a;    
}
int main()
{
    int*p=test();
    *p=20;
    return 0;
}

如何规避野指针

1、指针初始化

(1)、不知道指针初始化什么地址时,直接初始化为NULL

cpp 复制代码
#include<stdio.h>
int main()
{
    int* p=NULL;
    return 0;
}

(2)、明确知道初始化的值

cpp 复制代码
#include<stdio.h>
int main()
{
    int a=10;
    int* p=&a;
    return 0;
}

2、小心指针越界

C语言本身是不会检查数组越界行为的

3、指针指向空间释放即时置NULL

4、指针使用之前检查有效性

cpp 复制代码
#include<stdio.h>
int main()
{
    int* p=NULL;
    if(p!=NULL)//判断是否为空指针,检测是否有效
        *p=10;
    return 0;
}
相关推荐
Jerry1 小时前
LeetCode 459. 重复的子字符串
算法
海石4 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石4 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry6 小时前
LeetCode 151. 反转字符串中的单词
算法
gugucoding6 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
ChaoZiLL8 小时前
我的数据结构3——链表(link list)
数据结构·链表
a1117768 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜8 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry8 小时前
LeetCode 541. 反转字符串 II
算法
Jerry9 小时前
LeetCode 344. 反转字符串
算法