为什么leetcode上出现运行错误而vs2019上没有错误?

时间:2019-05-13 08:00:17

标签: c++

我确定 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;
}

1 个答案:

答案 0 :(得分:1)

为什么他们会出错却您却没有呢?他们正在使用address sanitizer进行编译,而您不是。

您的错误是什么? s.copy(str, s.size() + 1);正在从s.size长的字符串中复制s.size + 1个字符,并且

while(st.insert(*p).second) {
            p++;
        }

似乎也错了,“只要插入某些内容就继续进行”可能会在p上超出范围。

更不用说没有配对删除就进行新操作而导致的内存泄漏...