函数可以返回指向NULL的指针吗?

时间:2011-04-09 13:16:36

标签: c++ nullpointerexception

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;
}

此函数正在寻找简单链接列表中的项目,但如果函数找不到它,程序会崩溃告知段违规(我认为这是英文名称)。

我想知道是否找到了告诉用户未找到的消息或类似的消息。感谢。

3 个答案:

答案 0 :(得分:8)

您可能没有向我们展示所有问题代码,但这是一个问题:

while(code != aux->getcode() && aux != NULL){

你正在使用指针“aux”,然后然后测试它是否为NULL。这不好;你需要反过来做这件事:

while(aux != NULL && code != aux->getcode()){

如果你的指针可能为null,你总是需要在解除引用之前检查它。

答案 1 :(得分:2)

while(code != aux->getcode() && aux != NULL){
    aux = aux->getnext();
}

是的,如果aux为NULL,它将崩溃,因为您尝试通过编写aux->getcode()来获取代码,然后检查aux是否为NULL。也就是说,aux->getcode()aux != NULL之前执行。

现在想想,如果aux为NULL怎么办? aux->getcode()会崩溃!

循环应写为:

while(aux != NULL && code != aux->getcode()){
  aux = aux->getnext();
}

答案 2 :(得分:0)

我认为你应该像这样使用

while(aux != NULL&&code != aux->getcode())

首先,测试aux不是NULL,然后你可以使用atx->getcode()