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())