解引用空指针

Dereferencing null pointer

本文关键字:空指针 引用      更新时间:2023-10-16

我试图在c++中编写一个非常简单的指针赋值:

float  *src;
if(someCondition == true)
    src = somePointer;
else
    src = someOtherPointer;

然而,当我试图访问src时,我得到一个警告说"空指针的解引用(从变量src加载)"

同样,如果我尝试给src一些初始值,像这样:

float  *src = aPointer;
if(someCondition == true)
    src = somePointer;
else
    src = someOtherPointer;

我得到一个警告,说分配给src的初始值永远不会被读取。尽管这似乎并不影响我正在努力做的事情,但我正在努力摆脱所有潜在的问题。这里有什么问题吗?

任何帮助都是感激的。谢谢!

由于您使用指针而不是引用,因此期望NULL是指针的可能值。

检查NULL:

可能符合您的兴趣。
if(!src) {/*handle null case*/}

假设somePointersomeOtherPointer中的一个或两个为0/NULL

似乎编译器不够聪明,无法意识到src将始终被初始化。虽然IDK为什么会假设指针为NULL,但更有可能是一些垃圾值。这可能可以通过使用三元操作符(?:)将初始化设置为单个语句来解决:

float* src = someCondition ? somePointer : someOtherPointer;
编辑:

尝试将src初始化为NULL。这应该可以摆脱初始化警告,我怀疑它会创建一个未使用的值警告。