QT警告 zero as null pointer constant原因分析

article/2025/10/8 3:40:16

最近写QT5.9中写代码时遇到了一个警告:在这里插入图片描述
虽然不会影响程序正常编译,但是作为一个有潜在强迫症倾向的人,,必须把它消灭,百度一下,结果就出来了
在这里插入图片描述
虽然百度结果明明白白,但是,作为一个工程师,必须要弄懂别人给出的解决方法后面的原理,所以我就继续百度,结果如下:

熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”,如下:

int *p1 = NULL; 
int *p2 = 0;
int p3 = nullptr;

但是为什么C++11要引入nullptr?它与NULL相比又有什么不同呢?
C/C++中的NULL到底是什么
我们查看一下C和C++的源码,不难发现:

1.NULL在C++中的定义,NULL在C++中被明确定义为整数0:

/* Define NULL pointer value */
#ifndef NULL#ifdef __cplusplus#define NULL    0#else  /* __cplusplus */#define NULL    ((void *)0)#endif  /* __cplusplus */
#endif  /* NULL */

2.NULL在C中的定义.在C中,NULL通常被定义为如下:

#define NULL    ((void *)0)

也就是说NULL实质上是一个void *指针。

那么问题又来了,我们从一开始学习C++的时候就被告诫C++是兼容C的,为什么对于NULLC++却不完全兼容C呢?通过查找维基百科,才发现这其中的原因。

简单地说,C++之所以做出这样的选择,根本原因和C++的函数重载机制有关。考虑下面这段代码:

void Func(char *);
void Func(int);int main()
{Func(NULL);
}

如果C++让NULL也支持void *的隐式类型转换,这样编译器就不知道应该调用哪一个函数。

为什么要引入nullptr
C++把NULL定义为0,解决了函数重载后的函数匹配问题,但是又引入了另一个“问题”,同样是上面这段代码:

void Func(char *);
void Func(int);int main()
{Func(NULL);  // 调用Func(int)
}

由于我们经常使用NULL表示空指针,所以从程序员的角度来看,Func(NULL)应该调用的是Func(char *)但实际上NULL的值是0,所以调用了Func(int)。nullptr关键字真是为了解决这个问题而引入的。

另外我们还有注意到NULL只是一个宏定义,而nullptr是一个C++关键字。

nullptr如何使用
nullptr关键字用于标识空指针,是std::nullptr_t类型的(constexpr)变量。它可以转换成任何指针类型和bool布尔类型(主要是为了兼容普通指针可以作为条件判断语句的写法),但是不能被转换为整数。

char *p1 = nullptr;     // 正确
int  *p2 = nullptr;     // 正确
bool b = nullptr;       // 正确. if(b)判断为false
int a = nullptr;        // error

感谢互联网上大神的无私分享,让无数程序员都能互相学习,附送链接
链接:http://www.cnblogs.com/DswCnblog/p/5629073.html


http://chatgpt.dhexx.cn/article/UdA9k1h1.shtml

相关文章

力扣报错runtime error: load of null pointer of type ‘int‘解决思路

记录本算法小白刷力扣的这道题遇到的报错 349. 两个数组的交集https://leetcode.cn/problems/intersection-of-two-arrays/ 出现报错的代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int* intersection(int* nums1, int nums1Size,…

warning C6011: dereferencing NULL pointer <name>

去官网查下这个警告就知道解决办法了 https://docs.microsoft.com/en-us/cpp/code-quality/c6011?viewmsvc-170&viewFallbackFromvs-2019 “To resolve the issue, validate the pointer before use.”:使用前验证下就ok了 if(pointerNULL).......

Unable to handle kernel NULL pointer dereference at virtual address 00000000【转】

本文转载自:https://blog.csdn.net/hpu11/article/details/72628052 这说明是非法指针的使用,才导致系统出错。 [ 1023.510000] Unable to handle kernel NULL pointer dereference at virtual address 00000000[ 1023.520000] pgd c0004000[ 1023.5200…

ncnn报null pointer dereference异常

错误描述 基于c使用ncnn封装了深度学习模型,并将c项目打包成为了一个so库给Android调用,在打包成为so库之前,在Windows系统以及Ubuntu系统利用电脑的camera测试过都能正常运行没有任何异常,打包成so库之后给Android的开发人员调用…

win10用黑屏命令查看正在使用的或使用过的wifi密码

win10用黑屏命令查看正在使用的或使用过的wifi密码 打开黑屏终端: 方法一:win菜单键 R打开运行窗口,输入:cmd ,就可以进入黑屏终端了。方法二:回到桌面,点击win菜单图标旁的搜索,输…

物理机安装linux黑屏,安装ubuntu时黑屏的解决办法(3种)

我电脑显卡是Nvidia显卡~ 重启之后屏幕显示“输入不支持”,这是因为ubuntu对显卡的支持有关,需要手动添加显卡选项:nomodeset,使其支持Nvidia系列显卡 方法一 进入安装时,光标移动到"install ubuntu"&#x…

yum指令安装失败,或导致图形界面黑屏如何解决

前言 最近在学习linux中遇到一个小问题,发现卸载重装firefox导致图形界面黑屏,黑屏之前弹出一个警告。我又重装了几次虚拟机,发现每次都会出现这种错误,最终发现是SELinux设置导致这样的问题。 问题产生和解决 操作步骤如下&am…

本人账户登录计算机黑屏,电脑开机输入系统密码后就黑屏了,怎么办

输入登录账号密码以后出现故障和问题,跟开机立刻黑屏故障有本质区别,而因为跟登录账户有一定关联, 所以可以断定是因为exploer.exe进程造成的 很多时候进不去桌面,黑屏不显示,很可能是电脑刚开机,有很多的启动项在后台运行,反应迟钝,建议关闭不必要的启动项,一些软硬件…

python黑屏改成白底_Python 进行黑屏 PNR 的提取

重拾 Python 的学习,二刷了 Learn python the hard way 和廖雪峰老师的教程后,还是有点懵逼。考虑到日常工作常会给出一些逻辑判断相关的需求。就想尝试写一二个,毕竟学以致用。 最近给DT哥哥提了一个从中航信系统的返回内容提取 PNR 的逻辑…

计算机黑屏但是有鼠标,电脑桌面黑屏怎么解决 电脑黑屏怎么办 - 云骑士一键重装系统...

Ready 品牌型号:联想GeekPro 2020 系统:win10 1909 64位企业版 部分用户可能电脑型号不一样,但系统版本一致都适合该方法。 电脑桌面黑屏只有鼠标光标怎么办?下面就给大家分享电脑桌面黑屏只有鼠标光标的解决方法。 方法一: 按Ct…

ubantu 黑屏_死机黑屏专题上线啦,早鸟只要299,看完薪水翻一番

全程约5小时高清,140多页ppt,8大实验,基于x86_64的Centos 7.6和arm64,提供全套实验素材和环境。全面介绍kdumpcrash在死机黑屏方面的实战应用,全部案例源自线上云服务器和嵌入式产品开发实际案例! 看死机黑…

C语言程序运行黑屏,Win7开机黑屏代码0XC000000F的原因及解决方法

原标题:Win7开机黑屏代码0XC000000F的原因及解决方法 Win7开机黑屏出现0XC000000F代码是怎么回事?最近有用户朋友的电脑开机就遇到了这个问题,向云骑士求助。今天云骑士把解决该问题的方法整理一下,与大家一起分享。 原因分析: 这…

前端排查WebRtc黑屏记录

背景 本人前端开发,在做webrtc视频通话时,在部分安卓手机端,接收webrtc视频流黑屏,由于对webrtc不是太熟悉,一时不知道该如何下手排查。 第一步,发现问题的是安卓手机的webview,查看了webview版…

安装linux系统 黑屏,Ubuntu 16.04安装时显示器黑屏处理

问题描述: (1)Ubuntu 16.04使用USB启动盘安装时,出现"try ubuntu without installation"或“install ubuntu”选择,Enter选择安装后,显示器黑屏无任何显示。 (2)当Ubuntu系统安装结束后,系统启动后显示器黑屏…

计算机黑屏死机,电脑黑屏死机怎么解决(一键修复电脑黑屏死机的方式)

世界上有很多东西都会随着时间发生改变,但是Windows的BUG却不会。 对于微软来说,Windows系统在更新的同时又带来一堆BUG,已经是一项传统艺能。 放眼全球,大部分用户都曾遭到过Windows蓝屏死机的折磨。 资料显示,蓝屏死…

RV1109--LCD黑屏问题

RV1109–LCD黑屏问题 1、问题描述 平台:RV1109 需求:兼容一块10.1寸mipi的LCD屏(1218-A101NL66-28K),是rv1109的第10块屏幕,使用lcd_index10(lcd_index涉及到我司兼容LCD方式)来标…

C++实现系统黑屏

定义 电脑黑屏通常有两种定义,一种是指硬件黑屏,包括但不限于硬件故障、断电、显示器被硬件或软件关闭等;另一种是指系统层面上的黑屏,两种黑屏的最大差别就是系统层面上的黑屏会发光,而硬件黑屏则基本上不会。 这里…

C语言课程设计项目

C语言课程设计项目 团队介绍单位名怀化学院计算机科学与工程学院班级小组序号1901班第八组团队名称潜力无限组课程设计题目学生限时答题评测系统 一、课程设计题目基本要求介绍 (1) 输入信息:学生输入自己的学号姓名作为学生基本信息&…

C语言源码做的通讯录管理系统课程设计(源码+课程设计报告)

一、课程设计的目的: C语言课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言程序设计的知识点,又接近工程实际需要。本次设计的目的是通过课程设计的综合训练&#xf…

C语言源码做的班级档案管理系统课程设计(源码+课程设计报告)

一、课程设计的目的: C语言课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言程序设计的知识点,又接近工程实际需要。本次设计的目的是通过课程设计的综合训练&#xf…