我确定 stringToCharArray 函数存在一些问题。但是我不知道如何解决它。 enter image description here
char* stringToCharArray(string s)
{
char* str = new char[s.size() + 1];
s.copy(str, s.size() + 1);
str[s.size()] = '\0';
return str;
}
int lengthOfLongestSubstring(string s) {
char* p = stringToCharArray(s);
int len = 0;
int prelen = 0;
unordered_set<char>st;
while ( (*p) != '\0')
{
while(st.insert(*p).second) {
p++;
}
len = max(prelen, (int)st.size());
prelen = len;
st.clear();
st.insert(*p);
p++;
}
return len;
}
答案 0 :(得分:1)
为什么他们会出错却您却没有呢?他们正在使用address sanitizer进行编译,而您不是。
您的错误是什么? s.copy(str, s.size() + 1);
正在从s.size长的字符串中复制s.size + 1个字符,并且
while(st.insert(*p).second) {
p++;
}
似乎也错了,“只要插入某些内容就继续进行”可能会在p
上超出范围。
更不用说没有配对删除就进行新操作而导致的内存泄漏...