抛出'std :: bad_alloc'实例后调用C ++终止
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抛出'std :: bad_alloc'实例后调用C ++终止相关的知识,希望对你有一定的参考价值。
给定一个整数,我们需要找到整数的超级数字。
我们使用以下规则定义整数x
的超级数字:
如果x
只有1位数,那么它的超级数字是x
否则,超级数字等于x
的数字和的超级数字。这里,数字的数字和被定义为其数字的总和。
例:
super_digit(9875) = super_digit(9+8+7+5)
= super_digit(29)
= super_digit(2+9)
= super_digit(11)
= super_digit(1+1)
= super_digit(2)
= 2
任务:给你两个数字n
和k
。你必须计算p
.p
的超级数字是在数字n
连接k
时创建的。
我的代码解决了这个问题如下所示。
#include <bits/stdc++.h>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
int superDigit(string n, int k)
{
int res=0;
for (int x = 0; x < n.length(); x++)
{
res += n[x] - '0';
}
res = k * res;
if (res < 10)
return res;
else
return superDigit(to_string(res),1);
}
int main() {
string n;
int k;
cin >> n;
cin >> k;
cout << superDigit(n, k)<< endl;
return 0;
}
代码似乎对所有小数字都能正常工作,但是当n
是1e100000-1
而k
是100000
时,程序会返回以下错误:
在抛出'std :: bad_alloc'的实例后终止调用
what():std :: bad_alloc
我认为这是一个内存泄漏,但我该如何解决这个问题。泄漏在哪里发生?
你把n
当作1e10000-1
。这是关于1e10000
字符长。假设每个字符大约是1
字节大小。然后,
1e10000 bytes = 1e9997 kilobytes = 1e9994 MB = 1e9994 GB = 1e9991 TB
正如你所看到的那样,它非常庞大。
以上是关于抛出'std :: bad_alloc'实例后调用C ++终止的主要内容,如果未能解决你的问题,请参考以下文章
多个文件的内存分配错误“在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用” [C ++]
我收到以下错误:在抛出 'std::bad_alloc' 的实例后调用终止
第一个代码中的错误,但第二个正确“在抛出 'std::bad_alloc' what() 的实例后调用终止:std::bad_alloc Aborted(core dumped)”