我知道操作数的评估是从左到右,对于 “ &&” 操作数,如果左侧为假,则不应评估右侧!但是对于具有 vector 的这一行代码,它无法像这样工作,
假设left = 1且v.size = 1;因此我们没有v [1]。因为向量中只有v [0]
if ((left <= (v.size() -1 )) && ( v[node].Value > v[left].Value))
{
TempMin = left;
}
因此,我希望不对正确的操作数进行评估,但这会给我“超出范围的错误”。 有什么想法吗?
已编辑
v.size()为1并且v.size()-1 = 0。
我更改为代码并找到了问题,我认为VISUAL STUDIO运行时调试器存在问题。因为当我只运行代码时,一切工作正常,但是当我逐行调试代码时,IF语句无法正常工作
if (left <= v.size() -1 ) // first if
if (v[node].Value > v[left].Value) // right
TempMin = left;
在这种情况下,如果PASS出现错误,但我将其更改为
,则是第一个错误 if (left < v.size() ) // first if
or
int t = v.size() - 1;
if (left < t )
一切正常。所以(v.size()-1)似乎有问题!
答案 0 :(得分:1)
可能的问题:
<div class="container-fluid main" style="border:10px solid red;">
<p> I need the 'Websites' and 'Development' in the center of the column. At the moment .text-center doesn't work
<div style="border:10px solid purple;width:80%;margin:15% auto ">
<div class="content row">
<div class="col text-center" style="border:10px solid black;">
<h1>Websites</h1>
<h1>Development</h1>
</div>
</div>
</div>
</div>
然后h1
为v.size() = 0
,等于v.size() - 1
(size_t
)。因此18446744073709551615
会超出范围。
解决方案:
2^64 - 1
或left <= 18446744073709551615
而非left + 1 <= v.size()
left < v.size()
使您超出了范围。解决方案:
添加left <= v.size() - 1