非常に裸のC++プログラムの実行に問題があります。文字列を入力として受け取り、個々の数値を動的配列に設定するBigIntクラスです。私がこれまでにやろうとしているのは、BigIntを入力して出力するだけです...非常に簡単です。私のプログラムはうまくコンパイルされて実行されますが、最初の入力を入力すると私にはこの奇妙なエラーが発生します... "このアプリケーションは、ランタイムを異常な方法で終了するように要求しています 詳細についてはアプリケーションのサポートチームにお問い合わせください。奇妙なランタイムエラー
私のコードに何らかの欠陥が見つからないことがわかっているこの問題について、どうすればよいか分かりません。
誰もが考えている?
HERESに私のコード:
ヘッダファイル:
#ifndef BIGINT_H
#define BIGINT_H
#include <iostream>
namespace JHall{
class BigInt {
public:
BigInt(std::string s = "");
BigInt(const BigInt& b);
~BigInt();
void operator =(const BigInt& b);
friend std::istream& operator >>(std::istream& in, BigInt& b);
friend std::ostream& operator <<(std::ostream& out, const BigInt& b);
private:
short* num;
int cap;
int size;
};
}
#endif /* BIGINT_H */
実装ファイル:
#include "BigInt.h"
#include <cstdlib>
namespace JHall{
BigInt::BigInt(std::string s)
{
size = s.length();
cap = 100;
num = new short[cap];
int place = 0;
for(int i = size-1; i >= 0; i--)
num[place++] = strtol(s.substr(i-1,1).c_str(), NULL, 10);
}
BigInt::BigInt(const BigInt& b)
{
size = b.size;
cap = b.cap;
for(int i = 0; i < size; i++)
num[i] = b.num[i];
}
BigInt::~BigInt()
{
delete [] num;
}
void BigInt::operator =(const BigInt& b)
{
if(cap != b.cap)
{
short* temp = new short[b.cap];
for(int i = 0; i < b.cap; i++)
temp[i] = b.num[i];
delete [] num;
num = temp;
}
for(int i = 0; i < cap; i++)
num[i] = b.num[i];
size = b.size;
cap = b.cap;
}
std::istream& operator>>(std::istream& in, BigInt& b)
{
std::string s;
in>>s;
b.size = s.length();
int count = 0;
for(int i = b.size-1; i >= 0; i--)
b.num[count++] = strtol(s.substr(i-1,1).c_str(),NULL,10);
return in;
}
std::ostream& operator<<(std::ostream& out, const BigInt& b)
{
for(int i = b.size-1; i >= 0; i--)
out<<b.num[i];
return out;
}
}
MAIN FILE:
#include <cstdlib>
#include "BigInt.h"
using namespace std;
using namespace JHall;
/*
*
*/
int main(int argc, char** argv)
{
BigInt b1, b2;
cout<<"Enter a large integer"<<endl;
cin>>b1;
cout<<"Enter another large integer"<<endl;
cin>>b2;
cout<<b1;
cout<<b2;
return 0;
}
うん、デバッガ内で実行し、それが壊れる場所を確認。 –
最初のcin >> b1に当たったときに壊れます。私はBigIntを読み込むために>>演算子を適切にオーバーロードしたので、なぜそれほど確かではありません – user1227202