Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
取消引用空指针 我试图在C++中写一个非常简单的指针赋值: float *src; if(someCondition == true) src = somePointer; else src = someOtherPointer; float *src = aPointer; if(someCondition == true) src = somePointer; else src = someOtherPointer;_C++_Dereference - Fatal编程技术网

取消引用空指针 我试图在C++中写一个非常简单的指针赋值: float *src; if(someCondition == true) src = somePointer; else src = someOtherPointer; float *src = aPointer; if(someCondition == true) src = somePointer; else src = someOtherPointer;

取消引用空指针 我试图在C++中写一个非常简单的指针赋值: float *src; if(someCondition == true) src = somePointer; else src = someOtherPointer; float *src = aPointer; if(someCondition == true) src = somePointer; else src = someOtherPointer;,c++,dereference,C++,Dereference,然而,当我试图访问src时,我收到一条警告:“取消对空指针的引用(从变量src加载)” 另外,如果我尝试给src一些初始值,如下所示: float *src; if(someCondition == true) src = somePointer; else src = someOtherPointer; float *src = aPointer; if(someCondition == true) src = somePointer; else src

然而,当我试图访问src时,我收到一条警告:“取消对空指针的引用(从变量src加载)”

另外,如果我尝试给src一些初始值,如下所示:

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

if(someCondition == true)
    src = somePointer;
else
    src = someOtherPointer;
我收到一条警告,说分配给src的初始值永远不会被读取。尽管这似乎没有影响到我正在努力做的事情,但我正在努力摆脱所有潜在的问题。这里有什么问题吗


感谢您的帮助。谢谢

假设
somePointer
someOtherPointer
中的一个或两个都是0/NULL

假设
somePointer
someOtherPointer

中的一个或两个都是0/NULL

,因为您使用的指针和非引用期望
NULL
是指针的一个可能值

检查空值可能符合您的利益:

if(!src) {/*handle null case*/}

由于您使用的指针和非引用期望
NULL
是指针的一个可能值

检查空值可能符合您的利益:

if(!src) {/*handle null case*/}

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

编辑:


尝试将
src
初始化为空。这应该可以消除初始化警告,我怀疑它是否会创建一个未使用的值警告。

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

编辑:



尝试将
src
初始化为空。这将消除初始化警告,我怀疑它是否会创建一个未使用的值警告。

什么是
someCondition
?什么是
somePointer
someOtherPointer
?请告诉我们如何建立
somePointer
someOtherPointer
。float*src=someCondition? somePointer:someOtherPointer;如果(variableX>350)src=&(anArray[0]),则src=&(anArray[50])。这就是我试图实现的条件的要点。谢谢什么是
someCondition
?什么是
somePointer
someOtherPointer
?请告诉我们如何建立
somePointer
someOtherPointer
。float*src=someCondition?somePointer:someOtherPointer;如果(variableX>350)src=&(anArray[0]),则src=&(anArray[50])。这就是我试图实现的条件的要点。谢谢“总是”有点强。程序可以建立和维护非空不变量,因此不必总是检查空。“总是”有点强。一个程序可以建立和维护非空不变量,因此不必总是检查空。我试过了,但它仍然给出同样的警告。尽管使用了第三级运算符,编译器仍未意识到指针已初始化:(很抱歉,这也没用。我试过了,但它仍然给出了相同的警告。尽管使用了第三级运算符,但编译器没有意识到指针已初始化:(很抱歉,这也没用。不,我知道它们是有效指针。我也在其他地方使用它们。此外,尽管这可能不安全,因为我收到了警告,但这段代码工作得很好。如果两个指针中的任何一个为NULL/0,它将不起作用。我只是试图消除警告和可能性非常不安全的情况。在我看来,编译器似乎看到了一些你看不到的东西。可能是一些意外的执行路径,请尝试检查所有这些路径。通过注释代码块来缩小问题范围,查看警告是否消失/何时消失。不,我知道它们是有效的指针。我也在其他地方使用它们。而且,即使没有尽管由于我收到的警告,这可能是不安全的,但这段代码运行良好。如果两个指针中的任何一个为NULL/0,它将不起作用。我只是试图消除警告和可能的不安全情况。在我看来,编译器似乎看到了一些您看不到的东西。可能是一些意外的执行n路径,尝试全部检查。通过注释代码块来缩小问题范围,查看警告是否/何时消失。