簡體   English   中英

C++:while 循環條件下的運行時錯誤

[英]C++: Runtime error in while loop condition

nums 是一個向量,我有一個代碼行

while(i < nums.size()-2 && nums[i] == nums[i+1]) i++;

如果我在 nums.size() 為 1 時運行代碼,它會給我一個運行時錯誤。但是如果我將此行更改為:

while(i-2 < nums.size() && nums[i] == nums[i+1]) i++;

構建成功。

我不知道,執行這兩個代碼行有什么區別,為什么構建的行為不同?

有人知道嗎? 先感謝您。

std::vector<>.size()返回一個unsigned long ,當與nums.size() - 2結合使用時會產生下溢,結果是一個非常大的數字,不符合您的代碼邏輯。 由於表達式i < nums.size() - 2由於下溢而始終計算為true ,因此您將繼續遍歷向量,直到達到大於其大小的索引,這將導致運行時錯誤,更具體地說是vector index out of range

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM