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;
}

相关推荐

  1. 指针(C语言)

    2023-12-07 18:32:05       46 阅读
  2. C语言指针——指针

    2023-12-07 18:32:05       62 阅读
  3. c++指针如何处理?

    2023-12-07 18:32:05       41 阅读
  4. c++/c指针和悬空指针的示例

    2023-12-07 18:32:05       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 18:32:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 18:32:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 18:32:05       82 阅读
  4. Python语言-面向对象

    2023-12-07 18:32:05       91 阅读

热门阅读

  1. boa服务器移植

    2023-12-07 18:32:05       57 阅读
  2. React基本知识点整理

    2023-12-07 18:32:05       44 阅读
  3. 网络基础试题——附答案

    2023-12-07 18:32:05       69 阅读
  4. 大量 SVG 图标在 React 中的极速集成与应用

    2023-12-07 18:32:05       61 阅读
  5. dxf【C#】

    2023-12-07 18:32:05       56 阅读
  6. 【C++】多线程(二):std::mutex std::atomic的使用

    2023-12-07 18:32:05       59 阅读