1

私のコンストラクターは問題なくコピーを作成しますが、メソッドが引数として IntegerNumber を取ると、動作が停止します。

私のコンストラクタ:

IntegerNumber::IntegerNumber(const IntegerNumber &integerInput){
//Creates a copy of an Integer Number
//Set len and isNegative
len = integerInput.len; 
isNegative = integerInput.isNegative;
//Fill integer with IntegerInput
integer = new char[len+1];
for(int i = 0; i <= len; i++)
    integer[i]=integerInput.integer[i];
}

私のデストラクタ:

IntegerNumber::~IntegerNumber(){
//Destructs IntegerNumber
delete [] integer;
delete &len;
delete &isNegative;
}

私のクラスのデータメンバー:

private:
    char *integer;
    int len;
    bool isNegative;

プログラムが停止してもクラッシュしたり壊れたりしないように、コンストラクター/デストラクターの何が問題なのかを理解するのを手伝ってください。

4

2 に答える 2

4

あなたはこれを望まない:

delete &len;
delete &isNegative;

このようなインスタンス変数の削除は未定義の動作であるため、プログラムが停止する可能性があります

于 2012-07-14T22:53:53.917 に答える
1

std::unique_ptrおよびその他のクラスを使用して、常にメモリを管理します。動的配列は特に に適していstd::vector<T>ます。メモリを手動で管理しないでください。すべてのエラーが発生します。

于 2012-07-14T23:00:39.233 に答える