std::string::size() 的回傳會是 size_t 這樣的無號正整數或零的型別。
我在刷 LeetCode 的題目時寫出了這樣的程式碼。
class Solution { public: int strStr(string haystack, string needle) { for (int i = 0; i <= haystack.size() - needle.size(); i++) { // ... } return -1; } };
當 needle 比 haystack 還要長時,其運算結果原以為會是負數,但是因為無號正整數或零的型別,就會被轉成正整數,導致 for 迴圈中會透過 i 去使用到 haystack 或是 needle 以外的記憶體位址,導致程式崩潰。
沒有留言:
張貼留言