錯(cuò)誤情況(一)
錯(cuò)誤信息
在重刷47.全排列II時(shí),寫了如下代碼:
class Solution {
public:
void dfs(vector<int>& path, unordered_set<int>& st, vector<vector<int>>& res, vector<int>& nums){
if(path.size() == nums.size()){
res.push_back(path);
return;
}
for(int i = 0;i < nums.size(); ++ i){
if(st.find(i) == st.end()){
if( !i && nums[i] == nums[i - 1] && st.find(i - 1) == st.end()) continue;
st.insert(i);
path.push_back(nums[i]);
dfs(path, st, res, nums);
path.pop_back();
st.erase(i);
}
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
// 對(duì)重復(fù)數(shù)據(jù)進(jìn)行集中處理,而且不可以按照組合的方式去重,復(fù)雜度是階乘,可以使用set去重
// 去重的一種有效做法是保持?jǐn)?shù)字的相對(duì)次序不變,即第一個(gè)1沒有使用的情況下,其他1不可以使用
// 只要第一個(gè)1的位置不同,其余1的位置也會(huì)不同
sort(nums.begin(), nums.end());
vector<vector<int>> res;
vector<int> path;
unordered_set<int> st;
dfs(path, st, res, nums);
return res;
}
};
出現(xiàn)如下錯(cuò)誤信息:
Line 1037: Char 34: runtime error: addition of unsigned offset to 0x502000000090 overflowed to 0x50200000008c (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:1046:34
錯(cuò)誤定位
通過注釋代碼的方法,定位到錯(cuò)誤的位置在dfs
函數(shù)里的if
判斷:
if( !i && nums[i] == nums[i - 1] && st.find(i - 1) == st.end()) continue;
錯(cuò)誤原因
當(dāng)i
為0
元素時(shí),會(huì)執(zhí)行nums[i] == nums[i - 1]
,i - 1
為負(fù)數(shù),作為數(shù)組索引是不合法的,因此會(huì)報(bào)如上錯(cuò)誤。換言之,當(dāng)數(shù)組索引是負(fù)數(shù)時(shí),會(huì)出現(xiàn)上述錯(cuò)誤。文章來源:http://www.zghlxwxcb.cn/news/detail-839955.html
修改錯(cuò)誤
之所以寫!i
,是因?yàn)槲业倪壿嫵鲥e(cuò)的,應(yīng)該寫i != 0
或者i
。文章來源地址http://www.zghlxwxcb.cn/news/detail-839955.html
到了這里,關(guān)于LeetCode:Line 1037: Char 34: runtime error: addition of unsigned offset to 0x502000000090 overflowed的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!