取消引用空指针 我试图在C++中写一个非常简单的指针赋值: float *src; if(someCondition == true) src = somePointer; else src = someOtherPointer; float *src = aPointer; if(someCondition == true) src = somePointer; else src = someOtherPointer;
然而,当我试图访问src时,我收到一条警告:“取消对空指针的引用(从变量src加载)” 另外,如果我尝试给src一些初始值,如下所示:取消引用空指针 我试图在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
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路径,尝试全部检查。通过注释代码块来缩小问题范围,查看警告是否/何时消失。