我遇到了问题,似乎无法找到解决方案..
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;
}
我总是遇到运行时错误.. :(
答案 0 :(得分:5)
while(list->info!=search && list!=NULL)
应该是:
while(list!=NULL && list->info!=search)
这称为 Short-circuit evaluation。
当您使用&&
时,第一个表达式保证在内置基元类型的第二个之前执行 [#1] 。
在您的情况下,取消引用会在NULL
检查之前发生,因此,当list == NULL
时,您最终会取消归档NULL
并导致未定义的行为,崩溃。
在sugeested解决方案中:
如果list == NULL
则不会评估第二个条件。
参考:
[#1] C ++ 03标准1.9.18:
评估以下表达式
a && b a || b a ? b : c a , b
使用这些表达式中运算符的内置含义,在评估第一个表达式(12)之后有一个序列点。
答案 1 :(得分:2)
您未在此处检查list
的有效性:
while(list->info!=search && list!=NULL)
尝试在list!=NULL
之前检查list->info
。
另外,请使用名称list
,它是标准库容器的名称。
答案 2 :(得分:1)
&&
条件按照指定的顺序进行评估,因此在下一次迭代中list
在循环中变为NULL
时,您首先尝试{{1}导致访问冲突。您需要将条件反转为list->info != search
。