当前位置: 首页 > article >正文

C语言指针——野指针

目录

概念

原因

1、指针未初始化

2、指针越界访问

3、指针指向的空间释放

如何规避野指针

1、指针初始化

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

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

2、小心指针越界

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

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


概念

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

原因


1、指针未初始化

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


2、指针越界访问

#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、指针指向的空间释放

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

如何规避野指针

1、指针初始化


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

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


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

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


2、小心指针越界

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

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

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

#include<stdio.h>
int main()
{
    int* p=NULL;
    if(p!=NULL)//判断是否为空指针,检测是否有效
        *p=10;
    return 0;
}


http://www.kler.cn/a/161519.html

相关文章:

  • Spring Boot实现文件上传与OSS集成:从基础到应用
  • 深度学习中的感受野:从基础概念到多层次特征提取
  • Postman上传图片如何处理
  • 大厂的 404 页面都长啥样?看看你都见过吗~~~
  • 前端神经网络入门(三):深度学习与机器学习的关系、区别及核心理论支撑 - 以Brain.js示例
  • AcWing 302 任务安排 斜率优化的dp
  • Python中如何判断List中是否包含某个元素
  • cocos creator “TypeError: Cannot set property ‘string‘ of null
  • 【原神游戏开发日志1】缘起
  • 低代码你需要了解一下
  • 【Android】查看keystore的公钥和私钥
  • API接口使用方法(封装好的电商平台)
  • 添加新公司代码的配置步骤-Part4
  • 水平自动扩容和缩容HPA;API资源对象NetworkPolicy;Kubernetes用户安全控制;Kubernetes创建普通用户示例
  • Windows 基于 VMware 虚拟机安装银河麒麟高级服务器操作系统
  • 第3节:Vue3 v-bind指令
  • 华为OD机试 - 攀登者1(Java JS Python C)
  • 030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集
  • 电力智慧运维系统
  • 挑选数据可视化工具:图表类型、交互功能与数据安全
  • 2023年12月7日:QT实现登陆界面
  • 【LeetCode热题100】【双指针】三数之和
  • java中synchronized和Lock的区别是什么?
  • 免费文章生成器的种类,3款免费的文章生成器推荐
  • 计算机网络的分类
  • 跨境电商独立站怎么获取流量 跨境电商引流的两个方法