所以我创建了一个程序,用字符串总结两个“大整数”(比正常长的长)。问题是,当我运行该程序时,我输入了两个字符串,它甚至输出正确的结果,但随后打开“BigIntegers.exe已停止工作”窗口。当我在控制台的末尾关闭它时,它会显示“进程返回0xC0000005”。使用字符串时C++崩溃
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string a, b;
string c;
int save=0;
cin>>a>>b;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int minS=min(a.size(), b.size());
int maxS=max(a.size(), b.size());
int i;
bool flag=true;
for(i=0; i<=maxS; i++){
if(i<minS){
c[i]=(a[i]+b[i]-2*int('0')+save)%10;
save=int(a[i]+b[i]-2*int('0')+save)/10;
}else if(i>=minS&&i<maxS){
if(a.size()>b.size()){
c[i]=(a[i]+save-int('0'))%10;
save=int(a[i]+save-int('0'))/10;
}
else{
c[i]=(b[i]+save-int('0'))%10;
save=int(b[i]+save-int('0'))/10;
}
}else{
if(save==0) flag=false;
else {c[i]=0; c[i]+=save;}
}
}
if(flag == false){
for(int i=maxS-1; i>=0; i--){
cout<<int(c[i]);
}
}else{
for(int i=maxS; i>=0; i--){
cout<<int(c[i]);
}
}
return 0;
}
解决此类问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –
你可以(也会!)超出你的字符串范围。请记住,由于数组,矢量和字符串索引都是从零开始的,所以最上面的索引是'size - 1'。你的循环不尊重这一点。 –
对不起,然后。 –