我收到以下错误:抛出'std :: bad_alloc'的实例后调用终止终止

问题描述 投票:0回答:1

好,所以我有一个字符串,我重复了n次。例如,我有“ aba”,n = 10,我想找到一个的数量。因此,在这种情况下(abaabaabaa),我们有7个。我编写了以下通过某些测试用例的代码,但是当n大时,我得到了错误:抛出'std :: bad_alloc实例后调用终止。有办法解决吗?谢谢。

long repeatedString(string s, long n) {

    long i = 0, j = 0, cnt = 0;
    long sz = s.size();
    vector<char> ar;

    while (i < n)
    {
        ar.push_back(s[j]);
        j++;

        if (j >= sz)
        {
            j = 0;
        }

        i++;
    }

    i = 0;
    while (i < n)
    {
        if (ar[i] == 'a')
        {
            cnt++;
        }
        i++;
    }

    return cnt;

}
c++ string vector long-integer bad-alloc
1个回答
1
投票

基本上,原因是您的内存不足。当您执行push_back时,向量可能正在重新分配,这将需要连续分配中的capacity + capacity * 2(乘数可能有所不同)空间量。如果您提前保留,则可以解决该问题,但是您仍然需要n个连续字节的内存。

© www.soinside.com 2019 - 2024. All rights reserved.