我遇到了问题,似乎无法找到解决方案..
int linearSearch(nodeptr list,char search){
int pos =0;
if(list==NULL)
return -1;
while(list->info!=search && list!=NULL){
pos++;
list=list->next;
}
if(list==NULL)
return -1;
else
return pos;
}
Run Code Online (Sandbox Code Playgroud)
我总是得到运行时错误.. :(
while(list->info!=search && list!=NULL)
Run Code Online (Sandbox Code Playgroud)
应该:
while(list!=NULL && list->info!=search)
Run Code Online (Sandbox Code Playgroud)
这称为短路评估.
当你使用&&第一个表达式时,保证在第二个表达式之前执行内置原语类型[#1].
在你的情况下,解除引用发生在NULL检查之前,所以当list == NULL你,你将最终退化NULL并导致未定义的行为和崩溃.
在sugeested解决方案中:
如果list == NULL那么第二个条件将不会被评估.
参考:
[#1] C++ 03标准1.9.18:
在评估以下表达式时
Run Code Online (Sandbox Code Playgroud)a && b a || b a ? b : c a , b使用这些表达式中运算符的内置含义,在评估第一个表达式(12)之后有一个序列点.