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;
}
此函数正在寻找简单链接列表中的项目,但如果函数找不到它,程序会崩溃告知段违规(我认为这是英文名称)。
我想知道是否找到了告诉用户未找到的消息或类似的消息。感谢。
答案 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()
。