LeetCode findAnagrams: 添加无符号偏移错误
LeetCode findAnagrams: addition of unsigned offset error
我将以下代码提交到 leetcode 时出现以下错误,我不知道为什么,因为代码在我的本地机器上运行良好。我怎样才能重现此错误并找出导致它的确切原因?
Line 1061: Char 9: runtime error: addition of unsigned offset to 0x7ffdd1b0d720 overflowed to 0x7ffdd1b0d71e (basic_string.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h:1070:9
bool find_match(const std::map<char, std::pair<int, int>> &m){
for(const auto& [k, v] : m){
if(v.first != v.second) return false;
}
return true;
}
std::vector<int> findAnagrams(std::string s, std::string p){
std::vector<int> result;
std::map<char, std::pair<int, int>> search;
for(const char& c : p){
search[c].first++;
search[c].second = 0;
}
for(int i = 0; i < s.size(); i++){
if(p.find(s[i]) != p.npos)
search[s[i]].second++;
if(find_match(search))
result.push_back(1 + i - p.size());
if((1 + i - p.size() >= 0) && (p.find(s[1 + i - p.size()]) != p.npos))
search[s[1 + i - p.size()]].second--;
}
return result;
}
在开头存储字符串的长度p
,然后使用它。
vector<int> findAnagrams(string s, string p)
{
int pLen = p.size();
....
}
将代码中的所有 p.size()
替换为 pLen
。那你就可以开始了。
就像 Sam Varshavchik 先生在评论部分解释的那样,1 + i - p.size() >= 0
这是导致错误的原因。
你可以在leetcode中打印1 + i - p.size() >= 0
的值,你就能看到错误了。
我将以下代码提交到 leetcode 时出现以下错误,我不知道为什么,因为代码在我的本地机器上运行良好。我怎样才能重现此错误并找出导致它的确切原因?
Line 1061: Char 9: runtime error: addition of unsigned offset to 0x7ffdd1b0d720 overflowed to 0x7ffdd1b0d71e (basic_string.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h:1070:9
bool find_match(const std::map<char, std::pair<int, int>> &m){
for(const auto& [k, v] : m){
if(v.first != v.second) return false;
}
return true;
}
std::vector<int> findAnagrams(std::string s, std::string p){
std::vector<int> result;
std::map<char, std::pair<int, int>> search;
for(const char& c : p){
search[c].first++;
search[c].second = 0;
}
for(int i = 0; i < s.size(); i++){
if(p.find(s[i]) != p.npos)
search[s[i]].second++;
if(find_match(search))
result.push_back(1 + i - p.size());
if((1 + i - p.size() >= 0) && (p.find(s[1 + i - p.size()]) != p.npos))
search[s[1 + i - p.size()]].second--;
}
return result;
}
在开头存储字符串的长度p
,然后使用它。
vector<int> findAnagrams(string s, string p)
{
int pLen = p.size();
....
}
将代码中的所有 p.size()
替换为 pLen
。那你就可以开始了。
就像 Sam Varshavchik 先生在评论部分解释的那样,1 + i - p.size() >= 0
这是导致错误的原因。
你可以在leetcode中打印1 + i - p.size() >= 0
的值,你就能看到错误了。