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

56.野指针和悬空指针

一.野指针


野指针指的是指针指向的地址是未知的(随机的,不正确的地址)。

二.野指针出现的几种情况

1.定义指针未初始化

#include <stdio.h>int main(void)
{int *p;*p = 1;printf("*p is %d\n",*p);
}

正确写法:

#include <stdio.h>int main(void)
{int a;int *p = &a ;*p = 1;printf("*p is %d\n",*p);
}

2.指针越界

#include <stdio.h>int main(void)
{int a[3] = {1,2,3};int i;for(i = 0;i < 5;i++){printf("*p is %d\n",*(a+i));}}


正确写法:

#include <stdio.h>int main(void)
{int a[3] = {1,2,3};int i;for(i = 0;i < 3;i++){printf("*p is %d\n",*(a+i));}}

三.悬空指针

悬空指针指的是指针指向的地址已经被释放或者不在有效,但是指针本身仍然保留着这个地址,当程序尝试访问悬空指针指向的地址时,可能会导致未定义的行为。

四.悬空指针出现的几种情况


1.指针指向的地址已经被释放或者不在有效

#include <stdio.h>int* test(void)
{int a=1;return &a;
}int main(void)
{int *p = NULL;p = test();printf("a is %d\n",*p);
}


正确写法

#include <stdio.h>
int a=1;int* test(void)
{return &a;
}int main(void)
{int *p = NULL;p = test();printf("a is %d\n",*p);}

五.如何避免

野指针和悬空指针造成的问题往往很隐蔽,所以在使用指针的时候要避免野指针和悬空指针。
1.如果不知道要给指针变量赋值的地址是多少,就初始化为NULL。
2.避免指针越界。
3.指针指向的内存被释放以后要设置为NULL。在使用之前可以先判断指针是不是NULL。

六.视频教程

56.野指针和悬空指针_哔哩哔哩_bilibili

http://www.lryc.cn/news/357345.html

相关文章:

  • echarts-dataset,graphic,dataZoom, toolbox
  • AI界的“拼夕夕”登场,为上万张GPU寻找新使命
  • STM32-13-MPU
  • (超详细)字符函数和字符串函数【上】
  • AUS GLOBAL 荣获 Brokersview 颁奖盛典多项殊荣
  • Spring Aop 实现对mapper层入参进行重新赋值
  • 朗读亭主要作用有哪些?
  • 力扣:226. 翻转二叉树
  • 深入解析 JSONPath:从入门到精通
  • Python算法设计与分析期末
  • pg_lakehouse 与 datafusion
  • 基于51单片机的酒精浓度检测仪的设计
  • 重生之 SpringBoot3 入门保姆级学习(02、打包部署)
  • Java-常用模块
  • c++大作业 调整字幕的时间
  • Nmap使用方法
  • 任务3.1:采用面向对象方式求三角形面积
  • 解读《互联网政务应用安全管理规定》网络和数据安全中的身份认证和审计合规建设
  • HTML-JavaWeb
  • 数组-检查数组内是否存在和为7的倍数的子序列
  • 【图像处理与机器视觉】图像处理概述与像素
  • 虚函数的性能消耗到底在哪?
  • Visual Studio 的使用
  • Web前端与App前端:深入剖析两者的异同
  • 初学者必读:Midjourney AI创作工具的简易使用手册!
  • 使用python绘制一个五颜六色的爱心
  • 关于锂电池短路测试
  • 排序(前篇)
  • Linux学习笔记(二)
  • Git——pull request详细教程