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

空指针,野指针

空指针

在C/C++中,空指针(null pointer)是指向内存地址0的指针变量。

NULL在C/C++中的定义为:

#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif
#endif

从上面的代码定义中,我们可以发现

  • 在C语言中,NULL常量指针,指向内存地址0,在操作系统中,0-255内存地址是内核空间地址,是不允许用户层进行访问的

//C
#include <stdio.h>int main(int argc, char *argv[])
{int *p = NULL; //定义了一个空指针printf("p = %x\n", p); //p是指针变量,存的是内存地址,并且这个内存地址为0printf("*p = %d\n", *p); //在操作系统中,0-255内存地址是内核地址空间,//是不允许用户层进行访问的,所以会报段错误return 0;
}

  • 在C++中,NULL数字常量0,在操作系统中,0-255内存地址是内核空间地址,是不允许用户层进行访问的。

//C++
#include <iostream>
using namespace std;int main(int argc, char *argv[])
{int *p = NULL; //定义了一个空指针cout << "p = " << p << endl; //p是指针变量,存的是内存地址,并且这个内存地址为0cout << "*p = " << *p << endl; //在操作系统中,0-255内存地址是内核地址空间,//是不允许用户层进行访问的,所以会报段错误return 0;
}

综上所述,空指针(null pointer)是指向内存地址为0的指针变量

C语言中的NULL和C++语言中的NULL是不一样的

  • C语言中,NULL是指针常量,指向内存地址0

  • C++语言中,NULL是数字常量

野指针

在C/C++中,野指针(wild point)是指向的内存地址空间是未知的,不确定的指针。也就是这个指针存放的内存地址是不合法的,我们对其进行操作,可能会出现严重的后果。

可能产生野指针的情况

  1. 指针未初始化
#include <iostream>
using namespace std;int main(int argc, char *argv[])
{int *p;*p = 1;  //野指针,进行访问会出现段错误cout << "*p = " << *p << endl;return 0;
}

规避方法:指针初始化

int *p = NULL; //指针初始化
*p = 1;
  1. 指针越界操作
#include <iostream>
using namespace std;int main(int argc, char *argv[])
{int arr[5] = {1, 2, 3, 4, 5};int *p = arr;for (int i = 0; i <= 6; i++) //当i>=5时,循环体内对指针操作已越界,{cout << "*p = " << *p << endl;p++;}return 0;
}

上面这两个都是指针越界操作,得到的数据

规避方法:避免指针越界

#include <iostream>
using namespace std;int main(int argc, char *argv[])
{int arr[5] = {1, 2, 3, 4, 5};int *p = arr;for (int i = 0; i < 5; i++) //数组下标最大值为4{cout << "*p = " << *p << endl;p++;}return 0;
}
  1. 函数返回在栈中开辟的临时变量的指针,并对其进行访问
#include <iostream>
using namespace std;int* fun()
{int temp = 10;return &temp; //返回在栈中开辟的临时变量的指针
}int main(int argc, char *argv[])
{int *p = fun();*p = 1;cout << "*p = " << *p << endl;cout << "*p = " << *p << endl;return 0;
}

规避方法:不要返回在栈中开辟的临时变量的指针

  1. 指针释放后未置空
#include <iostream>
using namespace std;int main(int argc, char *argv[])
{int *p = new int(5);cout << "*p = " << *p << endl;delete p;cout << "*p = " << *p << endl;*p = 1; //野指针cout << "*p = " << *p << endl;return 0;
}

规避方法:指针释放后置空

#include <iostream>
using namespace std;int main(int argc, char *argv[])
{int *p = new int(5);cout << "*p = " << *p << endl;delete p;p = NULL; //指针释放后置空cout << "*p = " << *p << endl; //空指针是不允许会访问的,会出现段错误return 0;
}

综上所述,野指针(wild pointer)是指向内存空间地址是未知的,不确定的指针。

产生野指针的情况有:

  • 指针变量未被初始化,我们应该int *p = NULL;对指针变量进行初始化

  • 指针越界操作,我们应该禁止指针越界操作

  • 函数返回在栈中开辟的临时变量的指针,并对其进行操作,我们应该禁止返回在栈中开辟的临时变量的指针。

  • 指针释放后未置空,我们用malloc或new在堆中申请的内存空间,释放后,应置空

int *p = new int(5);
delete p;
p = NULL;int *p1 = malloc(sizeof(int));
free(p1);
p1 = NULL;

空指针(null pointer)和野指针(wild pointer)是两个不同的概率,我们不应该将他们混淆

ending😃

相关文章:

空指针,野指针

空指针在C/C中&#xff0c;空指针&#xff08;null pointer&#xff09;是指向内存地址0的指针变量。NULL在C/C中的定义为&#xff1a;#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif #endif从上面的代码定义中&#xff0c;我们可以发现在C…...

Mysql Nested-Loop Join算法和MRR

MySQL8之前仅支持一种join 算法—— nested loop&#xff0c;在 MySQL8 中推出了一种新的算法 hash join&#xff0c;比 nested loop 更加高效。&#xff08;后面有时间介绍这种join算法&#xff09; 1、mysql驱动表与被驱动表及join优化 先了解在join连接时哪个表是驱动表&a…...

Spark 广播/累加

Spark 广播/累加广播变量普通变量广播分布式数据集广播克制 Shuffle强制广播配置项Join Hintsbroadcast累加器Spark 提供了两类共享变量&#xff1a;广播变量&#xff08;Broadcast variables&#xff09;/累加器&#xff08;Accumulators&#xff09; 广播变量 创建广播变量…...

飞天云动,站在下一个商业时代的门口

ChatGPT的爆火让AIGC再度成为热词&#xff0c;随之而来的是对其商业化的畅想——不是ChatGPT自身如何盈利&#xff0c;而是它乃至整个AIGC能给现在的商业环境带来多大改变。 这不由得令人想起另一个同样旨在改变世界的概念&#xff0c;元宇宙。不同的是&#xff0c;元宇宙更侧…...

上海分时电价机制调整对储能项目的影响分析

安科瑞 耿敏花 2022年12月16日&#xff0c;上海市发改委发布《关于进一步完善我市分时电价机制有关事项的通知》(沪发改价管〔2022〕50号)。通知明确上海分时电价机制&#xff0c;一般工商业及其他两部制、大工业两部制用电夏季&#xff08;7、8、9月&#xff09;和冬季&#x…...

产品新人如何快速上手工作

三百六十行&#xff0c;行行出产品经理&#xff1a;上至封神的乔布斯&#xff0c;下至卖鸡蛋罐饼的阿姨&#xff0c;他们对如何打造自己的产品都会有一套完整的产品思路&#xff0c;这也是为什么说“人人都是产品经理”。这个看似光鲜的“经理”有时也会被戏称产品汪&#xff0…...

Linux: ARM GIC仅中断CPU 0问题分析

文章目录1. 前言2. 分析背景3. 问题4. 分析4.1 ARM GIC 中断芯片简介4.1.1 中断类型和分布4.1.2 拓扑结构4.2 问题根因4.2.1 设置GIC SPI中断的CPU亲和性4.2.2 GIC初始化&#xff1a;缺省的CPU亲和性4.2.2.1 boot CPU亲和性初始化流程4.2.2.1 其它非 boot CPU亲和性初始化流程5…...

第20篇:Java运算符全面总结(系列二)

目录 4、逻辑运算符 4.1 逻辑运算符 4.2 代码示例 5、赋值运算符 5.1 赋值运算符...

OpenCV4.x图像处理实例-OpenCV两小时快速入门(基于Python)

OpenCV两小时快速入门(基于Python) 文章目录 OpenCV两小时快速入门(基于Python)1、OpenCV环境安装2、图像读取与显示3、图像像素访问、操作与ROI4、图像缩放5、几何变换5.1 平移5.2 旋转6、基本绘图6.1 绘制直线6.2 绘制圆6.3 绘制矩形6.4 绘制文本7、剪裁图像8、图像平滑与…...

【Git】Mac忽略.DS_Store文件

我们在github上经常看到某些仓库里面包含了.DS_Store文件&#xff0c;或者某些sdk的压缩包里面可以看到&#xff0c;这都是由于随着git的提交把这类文件也提交到仓库&#xff0c;压缩也是一样&#xff0c;压缩这个先留着后面处理。 Mac上的.DS_Store文件 .DS_Store 文件&#…...

12.2 基于Django的服务器信息查看应用(CPU信息)

文章目录CPU信息展示图表展示-视图函数设计图表展示-前端界面设计折线图和饼图展示饼图测试折线图celery和Django配合实现定时任务Windows安装redis根据数据库中的数据绘制CPU折线图CPU信息展示 图表展示-视图函数设计 host/views.py def cpu(request):logical_core_num ps…...

【软件测试】接口测试总结

本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什么要做&#xff1f; 第二部分&#xff1…...

代码随想录算法训练营第52天 || 300.最长递增子序列 || 674. 最长连续递增序列 || 718. 最长重复子数组

代码随想录算法训练营第52天 || 300.最长递增子序列 || 674. 最长连续递增序列 || 718. 最长重复子数组 300.最长递增子序列 题目介绍 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或…...

gitblit 安装使用

1 安装服务端 简而言之&#xff1a;需要安装 java&#xff0c;gitblit&#xff0c; git 三个软件 Windows 10环境使用Gitblit搭建局域网Git服务器 前言 安装Java并配置环境安装gitblit并配置启动gitblit为windows服务使用gitblit创建repository并管理用户 1.1 安装Java并配…...

使用 TensorFlow、Keras-OCR 和 OpenCV 从技术图纸中获取信息

简单介绍输入是技术绘图图像。对象检测模型获取图像后对其进行分类&#xff0c;找到边界框&#xff0c;分配维度&#xff0c;计算属性。示例图像&#xff08;输入&#xff09;分类后&#xff0c;找到“IPN”部分。之后&#xff0c;它计算属性&#xff0c;例如惯性矩。它适用于不…...

ESP32设备驱动-GUVA-S12SD紫外线检测传感器驱动

GUVA-S12SD紫外线检测传感器驱动 文章目录 GUVA-S12SD紫外线检测传感器驱动1、GUVA-S12SD介绍2、硬件准备3、软件准备4、驱动实现1、GUVA-S12SD介绍 GUVA-S12SD 紫外线传感器芯片适用于检测太阳光中的紫外线辐射。 它可用于任何需要监控紫外线量的应用,并且可以简单地连接到任…...

WIN7下 program file 权限不足?咋整?!!

在WIN7下对Program Files目录的权限问题 [问题点数&#xff1a;40分&#xff0c;结帖人mysunck] 大部分人说要使用manifest&#xff0c;但是其中一个人说&#xff1a; “安装程序要求管理员很正常&#xff0c;你的程序可以在programfiles,但用户数据不能放那里&#xff0c;因…...

119.(leaflet篇)文字碰撞

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>...

cuda编程以及GPU基本知识

目录CPU与GPU的基本知识CPU特点GPU特点GPU vs. CPU什么样的问题适合GPU&#xff1f;GPU编程CUDA编程并行计算的整体流程CUDA编程术语&#xff1a;硬件CUDA编程术语&#xff1a;内存模型CUDA编程术语&#xff1a;软件线程块&#xff08;Thread Block&#xff09;网格&#xff08…...

Python 机器学习/深度学习/算法专栏 - 导读目录

目录 一.简介 二.机器学习 三.深度学习 四.数据结构与算法 五.日常工具 一.简介 Python 机器学习、深度学习、算法主要是博主从研究生到工作期间接触的一些机器学习、深度学习以及一些算法的实现的记录&#xff0c;从早期的 LR、SVM 到后期的 Deep&#xff0c;从学习到工…...

Springboot怎么实现restfult风格Api接口

前言在最近的一次技术评审会议上&#xff0c;听到有同事发言说&#xff1a;“我们的项目采用restful风格的接口设计&#xff0c;开发效率更高&#xff0c;接口扩展性更好...”&#xff0c;当我听到开头第一句&#xff0c;我脑子里就开始冒问号&#xff1a;项目里的接口用到的是…...

Jetpack Compose 深入探索系列六:Compose runtime 高级用例

Compose runtime vs Compose UI 在深入讨论之前&#xff0c;非常重要的一点是要区分 Compose UI 和 Compose runtime。Compose UI 是 Android 的新 UI 工具包&#xff0c;具有 LayoutNodes 的树形结构&#xff0c;它们稍后在画布上绘制其内容。Compose runtime 提供底层机制和…...

23.3.2 Codeforces Round #834 (Div. 3) A~E

FG明天补 A-Yes-Yes? 题面翻译 给定 ttt 个字符串&#xff0c;请判定这些字符串是否分别是 YesYesYesYes…\texttt{YesYesYesYes\dots}YesYesYesYes… 的子串。是则输出 YES&#xff0c;否则输出 NO&#xff08;YES 和 NO 大小写不定&#xff09;。 Translated by JYqwq …...

一次失败的面试经历:我只想找个工作,你却用面试题羞辱我!

金三银四近在咫尺&#xff0c;即将又是一波求职月&#xff0c;面对跳槽的高峰期&#xff0c;很多软件测试人员都希望能拿一个满意的高薪offer&#xff0c;但是随着招聘职位的不断增多&#xff0c;面试的难度也随之加大&#xff0c;而面试官更是会择优录取小王最近为面试已经焦头…...

java版工程管理系统 Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码

java版工程管理系统Spring CloudSpring BootMybatis实现工程管理系统 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和…...

附录3-大事件项目后端-项目准备工作,config.js,一些库的简易用法,main.js

目录 1 一些注意 2 创建数据库 3 项目结构 4 配置文件 config.js 5 参数规则包 hapi/joi与escook/express-joi 5.1 安装 5.2 文档中的demo 5.2.1 定义规则 5.2.2 使用规则 5.3 项目中的使用 5.3.1 定义信息规则 5.3.2 使用规则 6 密码加密包 bcrypt.…...

并发编程-线程

并发编程-线程 一个进程是操作系统中运行的一个任务&#xff0c;进程独立拥有CPU、内存等资源一个线程是一个进程中运行的一个任务&#xff0c;线程之间共享CPU、内存等资源&#xff0c;进程里的每一个任务都是线程。 线程创建 创建线程&#xff1a;使用threading模块中的Th…...

图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径

一、题目 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。 二、示例 2.1> 示例 1&#xff1a; 【输入】root [5,4,8,11,null,13,4,7,2,null,null,5,1], t…...

使用Python免费试用最新Openai API

一、背景介绍 3月2日凌晨&#xff0c;OpenAI放出了真正的ChatGPT API&#xff0c;不是背后的GPT-3.5大模型&#xff0c;是ChatGPT的本体模型&#xff01;ChatGPT API价格为1k tokens/$0.002&#xff0c;等于每输出100万个单词&#xff0c;价格才2.7美金&#xff08;约18元人民…...

04、启动 SVN 服务器端程序

启动 SVN 服务器端程序1 概述2 用命令行单项目启动2.1 采用 svnserve 命令2.2 验证服务是否启动2.3 命令行方式的缺陷3 注册Windows服务3.1 注册服务的命令3.2 命令说明3.3 启动服务1 概述 SVN 服务器和 Tomcat 服务器&#xff0c;Nexus 服务器一样, 必须处于运行状态才能响应…...

网站开发有限公司/百度首页 百度一下

向set集合中插入元素时&#xff0c;可根据set.insert().second的返回值判断集合中是否已有该元素。 #include<set> using namespace std; int main() {set<char>a;a.insert(a);if(a.insert(a).second){printf("插入成功");}else{printf("插入失败&…...

长沙产品网站建设/单个药品营销策划方案

一、昨天完成的 因为昨天课程较满&#xff0c;所以没有写太多的代码&#xff0c;在功能实现的方面并没有实质性的进展。 二、今天做的 继续Text文本框添加文字&#xff0c;解决不能显示的问题&#xff0c;添加文本框可以出现在截图区域任意位置的功能。 三、出现的问题 添加的文…...

松岗做网站费用/百度官网推广

首先假设2个参数&#xff1a; 总记录数&#xff1a;totalRecord 每页最大记录数&#xff1a;pageSize 方法一&#xff08;推荐&#xff09;: 总页数 &#xff08;总记录数 每页数据大小 - 1&#xff09; / 每页数据大小 totalPage (totalRecord pageSize - 1) / pageS…...

免费咨询服务协议/seo客服

中新网1月28日电 在28日的国家能源局例行新闻发布会上&#xff0c;新能源和可再生能源司副司长李创军透露&#xff0c;2018年&#xff0c;全年光伏发电新增装机4426万千瓦&#xff0c;仅次于2017年新增装机&#xff0c;为历史第二高。无人机拍摄的江西泰和县展宇光伏发电站。 邓…...

网站建设项目策划书格式/seo关键词优化外包

http://www.oschina.net/news/73680/android-studio-widget?frommail-notify http://blog.csdn.net/s13383754499/article/details/79034490...

免费的购物网站源码/网站运营及推广方案

前言 前几天接到客户需求&#xff0c;做一个登记客户信息的表单&#xff0c;做好以后要求有一个配置文件可以修改全局接口&#xff0c;第一次做&#xff0c;查了网上各种资料&#xff0c;最终以失败告终&#xff0c;在朋友的帮助下最终成功&#xff01;&#xff01;&#xff0…...