我有这段代码:
while (current->next->data <= temp->data && current->next != nullptr)
{
current = current->next;
}
当我运行它时,我收到错误:
抛出异常:读取访问冲突。 current-&gt; next是nullptr。
我相信我不应该收到这个错误,因为这是我检查的确切内容;我是新手,有什么我做错了吗?
答案 0 :(得分:1)
while (current->next->data <= temp->data && current->next != nullptr)
如果current->next
为null
,则在第一次迭代时会失败。
你应该交换条件检查的顺序。
while (current->next != nullptr && current->next->data <= temp->data)
答案 1 :(得分:0)
由 http://en.cppreference.com/w/cpp/language/operator_logical
lhs&amp;&amp; RHS
对于内置逻辑AND运算符,如果两个操作数均为true,则结果为true。否则,结果为false。该运算符是短路的:如果第一个操作数为假,则不评估第二个操作数
lhs
表达式将首先执行,因此您应该将current->next
空指针检查放在&&
左侧的条件中。
答案 2 :(得分:0)
&amp;&amp;操作员组从左到右。操作数都是 在上下文中转换为bool(第7条)。如果两者都是如此 操作数是真的,否则是假的。不像&amp;,&amp;&amp;担保 从左到右的评估:如果是,则不评估第二个操作数 第一个操作数是假的。
所以,在
wait
首先评估第一个操作数,即current->next->data <= temp->data && current->next != nullptr
。如果current->next->data <= temp->data
为current->next
,则会出现错误。