Вот только начал писать класс для работы с длинными числами, написал конструктор, который на вход принимает строку: Код | BigInt::BigInt(char *str) { nol=0; long i, j; int tCelLen, tDrobLen, s; char* ZapyatPos=strchr (str, ','); s=strlen(str); if (ZapyatPos==NULL) { droblen=0; tDrobLen=0; zposition=-1; } else { tDrobLen=&str[s]-(ZapyatPos+1); } if (str[0]=='-') { if (ZapyatPos==NULL) { sign=-1; tCelLen=s-1; } else { sign=-1; tCelLen=ZapyatPos-str-1; zposition=tCelLen+1; } } else { if (ZapyatPos==NULL) { sign=1; tCelLen=s; } else { sign=1; tCelLen=ZapyatPos-str; zposition=tCelLen; } } if (tCelLen<0) tCelLen=0; if (tDrobLen<0) tDrobLen=0;
cellen=tCelLen; cel= new unsigned char [cellen]; memset(cel,0,cellen); droblen=tDrobLen; drob= new unsigned char[droblen]; memset(drob,0,droblen); if (tCelLen>0 && tDrobLen>0) { if (sign==-1) { for (i=1; i<=tCelLen; i++) {cel[i-1]=str[i]; cel[i]='\0';} for (i=0, j=tCelLen+2; i<=tDrobLen-1, j<=s; i++, j++) {drob[i]=str[j];} }
else { for (i=0; i<=tCelLen-1; i++) {cel[i]=str[i]; cel[i+1]='\0';} for (i=0, j=tCelLen+1; i<=tDrobLen-1, j<=s; i++, j++) drob[i]=str[j]; } cout<<cel; cout<<","; cout<<drob; }
if (tCelLen==0 && tDrobLen>0) { if (sign==-1) for (i=0, j=2; i<=tDrobLen-1, j<=s; i++, j++) drob[i]=str[j]; else for (i=0, j=1; i<=tDrobLen-1, j<=s; i++, j++) drob[i]=str[j]; cout<<","; cout<<drob; } if (tCelLen>0 && tDrobLen<1) { if (sign==-1) for (i=0, j=1; i<=tCelLen, j<=s; i++, j++) {cel[i]=str[j]; cel[i+1]='\0';} else for (i=0; i<=s; i++) {cel[i]=str[i]; cel[i+1]='\0';} cout<<cel; }
}
|
Имеятся и деструктор:
Код | ~BigInt() { delete [] cel; delete [] drob; }
|
Так вот при компиляции вылетает ошибка...где-то вообщем с памятью напортачил, никак не могу найти ошибку!!! помогите пожалуйста!!! заранее благодарен!!! |