使用字符串时C ++崩溃

时间:2017-03-04 07:59:38

标签: c++ string

所以我创建了一个程序,用字符串总结两个“大整数”(大于普通的长整数)。问题是,当我运行程序时,我输入两个字符串,它甚至输出正确的结果,但然后打开“BigIntegers.exe已停止工作”窗口。当我在控制台的末尾关闭它时,它会显示“Process returns 0xC0000005”。

#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;
}

2 个答案:

答案 0 :(得分:2)

请发消息,检查一下你的问题。错误0xc0000005是关于“内存访问冲突”,这是因为你在许多地方超出了字符串限制。例如,下一个:

for(i=0; i<=maxS; i++)

它从0到maxS,但你的字符串从0到(maxS - 1)。在您尝试读取位置c [maxS]时,您是一个入侵记忆。

答案 1 :(得分:0)

天哪,我发现了错误! 不过,谢谢你的帮助!

#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]=1;//<---------Here it is, before it was c[i]=0; c[i]+=save;
    }
}
//cout<<c.size()<<endl;
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;
}