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;
}
相关推荐
吞下星星的少年·-·几秒前
区间转化、扫描线
算法
Languorous.9 分钟前
C++数据结构进阶|堆(Heap)详解:从手写实现到面试高频实战
数据结构·c++·面试
笨笨饿11 分钟前
80_聊聊SPI以及它们的变体
linux·c语言·网络·stm32·单片机·算法·个人开发
Ricardo-Yang12 分钟前
使用GEE以及LandSat8植被指数NDVI计算
python·深度学习·神经网络·算法·视觉检测
sheeta199818 分钟前
LeetCode 每日一题笔记 日期:2026.05.12 题目:1665. 完成所有任务的最少初始能量
笔记·算法·leetcode
khalil102019 分钟前
代码随想录算法训练营Day-49 图论01 | 图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
c++·算法·leetcode·深度优先·图论
Chase_______28 分钟前
【算法】删除子数组的最大得分 & 最多 K 个重复元素的最长子数组——不定长滑动窗口与哈希频率约束
算法·哈希算法
fie888940 分钟前
城市环境下车辆目标跟踪算法 MATLAB 实现
算法·matlab·目标跟踪
tryCbest41 分钟前
软考 - 排序算法
算法·排序算法
AKA__Zas1 小时前
芝士算法(双指针篇 1.0)
java·算法·学习方法