读书人

大数求和为啥是segmentation fault解决

发布时间: 2012-04-21 14:34:44 作者: rapoo

大数求和为啥是segmentation fault
[code=C/C++][/code]
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=30;
int *str2int(char *str)
{
int i,len=strlen(str);
int *a=new int[(len+1)*sizeof(int)];
for(i=0;i<len;i++)
a[i]=(int)str[len-i-1]-48;
return a;
}
int check(int *a,int n)
{
int k=0;
int len=n;
while(a[len-1]==0&&len>1)
len--;
for(k=0;k<len;k++)
{
if(a[k]>=10)
{
a[k+1]=a[k+1]+a[k]/10;
a[k]=a[k]%10;
}
}
if(a[k]!=0) len=k+1;
return len;
}
char *int2str(int *a,int n)
{
int i;
char *str=new char[(n+1)*sizeof(char)];
for(i=0;i<n;i++)
str[i]=(char)a[n-i-1]+48;
str[n]='\0';
return str;
}
char *addition(char *m1,char *m2)
{
int i,len1,len2,len,c=0;
int *t1,*t2;
len1=strlen(m1);
len2=strlen(m2);
len=(len1>=len2)?len1:len2;
t1=new int[(len+2)*sizeof(int)];
t2=new int[(len+2)*sizeof(int)];
t1=str2int(m1);
t2=str2int(m2);
for(i=len1;i<len+1;i++)
t1[i]=0;
for(i=len2;i,len+1;i++)
t2[i]=0;
for(i=0;i<len;i++)
t1[i]=t1[i]+t2[i];
len=check(t1,len);
char *str=new char[(len+2)*sizeof(char)];
for(i=0;i<len;i++)
str[i]=(char)t1[len-i-1]+48;
str[len]='\0';
return str;

}
int main()
{
char s1[maxn],s2[maxn];
while(cin>>s1>>s2)
cout<<addition(s1,s2)<<endl;
return 0;
}
我看看了很久这个程序,始终是出现错误不知道是为啥?各位能帮我指点迷津吗?

[解决办法]

C/C++ code
int main(){    char s1[maxn],s2[maxn];    memset(s1, 0, sizeof(s1));//首次定义记得清空    memset(s2, 0, sizeof(s2));    while(cin>>s1>>s2)    {        cout<<addition(s1,s2)<<endl;        memset(s1, 0, sizeof(s1));//再次使用记得清空,这两个地方都会出现strlen错误        memset(s2, 0, sizeof(s2));    }    return 0;}
[解决办法]
你的程序比较麻烦,这个程序可以直接运行:
C/C++ code
#include <iostream>using std::endl;using std::cout;using std::cin;int main(){    const int size = 50;    char s1[size],s2[size];    cout << "please input first  s1:";    cin >> s1;    cout << "please input second s2:";    cin >> s2;    int rsize = (strlen(s1) >= strlen(s2) ?strlen(s1):strlen(s2)) + 2;    char *result = new char[rsize];    memset(result,'0',rsize);    result[rsize - 1] = '\0';    int k = 0,temp = 0,i,j,m = rsize -2;    for(i = strlen(s1) - 1,j = strlen(s2)  - 1;i >= 0 && j >= 0; --i,--j)    {        temp = (s1[i] - '0') + (s2[j] - '0') + k;        result[m--] = temp % 10 + '0';        k = temp/10;    }    if(i < 0 && j >= 0)    {        while(j >= 0)        {            temp = s2[j--] - '0' + k;            result[m--] = temp % 10 + '0';            k = temp/10;        }    }    else if(i >=0 && j < 0)    {        while(i >= 0)        {            temp = s1[i--] - '0' + k;            result[m--] = temp % 10 + '0';            k = temp / 10;        }    }            result[m] = k + '0';            cout << "             sum:";            if(result[0] == '0')                cout << result + 1 << endl;            else                cout << result << endl;            delete []result;} 


[解决办法]
segmentation fault是越界,如果不清空,你在strlen的时候会出问题。。。。

读书人网 >C++

热点推荐