C++ 函数能否返回指向NULL的指针?
这个函数正在一个简单的链表中寻找一个项目,但是如果这个函数没有找到它,程序就会崩溃,告诉你有段冲突(我想这是英文名称)C++ 函数能否返回指向NULL的指针?,c++,nullpointerexception,C++,Nullpointerexception,这个函数正在一个简单的链表中寻找一个项目,但是如果这个函数没有找到它,程序就会崩溃,告诉你有段冲突(我想这是英文名称) 我想知道是否找到了,是否要告诉用户一条未找到的消息或类似的消息。谢谢。您可能没有向我们展示所有问题代码,但这是一个问题: class sll_item {private: sll_item *next_; int code_; ... ... class sll_ { private: sll_item *first_; sll_item *l
我想知道是否找到了,是否要告诉用户一条未找到的消息或类似的消息。谢谢。您可能没有向我们展示所有问题代码,但这是一个问题:
class sll_item
{private:
sll_item *next_;
int code_;
...
...
class sll_
{ private:
sll_item *first_;
sll_item *last_;
...
...
sll_item* sll_ :: lookforitem(int code)
{
sll_item* aux = first_;
while(code != aux->getcode() && aux != NULL){
aux = aux->getnext();
}
return aux;
}
您正在使用指针“aux”,然后测试它是否为NULL。那不好;你需要反过来做:
while(code != aux->getcode() && aux != NULL){
如果您有一个可能为空的指针,您总是需要在取消引用它之前检查它
while(aux != NULL && code != aux->getcode()){
是的,如果aux
为空,它将崩溃,因为您试图先通过写入aux->getcode()
来获取代码,然后检查aux
是否为空。也就是说,aux->getcode()
在aux!=空
现在想想,如果aux为NULL呢<代码>辅助->获取代码()会崩溃
循环应写为:
while(code != aux->getcode() && aux != NULL){
aux = aux->getnext();
}
我想你应该这样用
while(aux != NULL && code != aux->getcode()){
aux = aux->getnext();
}
首先,测试aux是否不为NULL,然后您可以使用
atx->getcode()
是的,fnc可以返回nullptr(不为NULL、NULL或NULL-这些都是老把戏,如果您想要现代风格的程序,请使用nullptr关键字),作为“未找到”的指示符,可能会告诉他有关&&short-circuiting:)的确,@freinn,也许你已经知道了,但是在一个“&&”表达式中,子表达式是从左到右求值的,如果第一个表达式为false,则第二个表达式根本不会求值。我知道短路,但我发现找到代码的可能性更大,而不是得到列表的末尾。谢谢@freinn取消引用是指当您访问指针指向的对象时。在本例中,使用“->”。
while(aux != NULL&&code != aux->getcode())