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;
}
相关推荐
独好紫罗兰3 分钟前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n10 分钟前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
努力学算法的蒟蒻10 分钟前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_8414956415 分钟前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦16 分钟前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
独好紫罗兰36 分钟前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_8414956441 分钟前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
budingxiaomoli41 分钟前
优选算法-字符串
算法
qq7422349841 小时前
APS系统与OR-Tools完全指南:智能排产与优化算法实战解析
人工智能·算法·工业·aps·排程
数智工坊1 小时前
【数据结构-树与二叉树】4.5 线索二叉树
数据结构