附加std字符串时出现bad_alloc异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了附加std字符串时出现bad_alloc异常相关的知识,希望对你有一定的参考价值。

考虑:

int main(){    
    string str("aaaaaaaaaa");        
    for (int i = 0; i < 1000; i++)
    {
       str += str.data();
    }
}

对于大型i,会出现“bac_alloc”错误。有没有办法防止这种情况发生?如果没有,那么替代方式是什么(加长字符串)?

答案

你的代码str += str.data()一次又一次地将字符串翻倍,1000次。这将最终形成一串长度为10*2^1000的长度,这对于记忆来说是非常重要的。您可能想要连接"aaaaaaaaa"一千次,而不是将字符串加倍1000次:

string str;
for (int i = 0; i < 1000; i++) {
   str += "aaaaaaaaaaa";
}

以上是关于附加std字符串时出现bad_alloc异常的主要内容,如果未能解决你的问题,请参考以下文章

解决程序出现“terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_a

C++:在计算大字符串的长度时抛出“std::bad_alloc”的实例后调用终止

Qt std :: bad_alloc

第一个代码中的错误,但第二个正确“在抛出 'std::bad_alloc' what() 的实例后调用终止:std::bad_alloc Aborted(core dumped)”

我的Android进阶之旅解决安装apk时出现错误:INSTALL_FAILED_CONFLICTING_PROVIDER : Package couldn‘t be installed in(代码片

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