-1

そのインデックスで「真」の値を保持することによって int 値が存在するかどうかを表す、ブール値の配列を持つクラスのコンストラクターに問題があります。したがって、新しいセットを作成すると:

IntSet set(4, 5, 6); // up to 5 parameters may be entered, with default values if some are missing.

これにより、サイズ 6 (渡された最大値) の配列が作成され、インデックス 4、5、および 6 の値が true に設定され、残りは false に設定されます。

これは私がこれまでに持っているものですが、正しく動作させることができないようです:

.h:

class IntSet {

public:

bool* value;
int size;

// CONSTRUCTORS
IntSet(int val1 = -1, int val2 = -1, int val3 = -1, int val4 = -1, int val5 = -1);
IntSet(const IntSet &other);
~IntSet();

.cpp:

IntSet::IntSet(int val1, int val2, int val3, int val4, int val5) {



// check if all values are default.
if((val1 == -1) && (val2 == -1) && (val3 == -1) && (val4 == -1) && (val5 == -1)) {

    val1 = 1;
    size = 1;

// else if one or more values are not default, find largest value and 
// set size to the value.
} else {

    if(val1 >= val2 && val1 >= val3 && val1 >= val4 && val1 >= val5) {
        size = val1;
    }

    if(val2 >= val1 && val2 >= val3 && val2 >= val4 && val2 >= val5) {
        size = val2;
    }

    if(val3 >= val1 && val3 >= val2 && val3 >= val4 && val3 >= val5) {
        size = val3;
    }

    if(val4 >= val1 && val4 >= val2 && val4 >= val3 && val4 >= val5) {
        size = val4;
    }

    if(val5 >= val1 && val5 >= val2 && val5 >= val3 && val5 >= val4) {
        size = val5;
    }
}

// Create pointer to boolean array of size "size"
value = new bool[size];

// set all values at their specified index to true.
if(val1 >= 0)
    value[val1] = true;

if(val2 >= 0)
    value[val2] = true;

if(val3 >= 0)
    value[val3] = true;

if(val4 >= 0)
    value[val4] = true;

if(val5 >= 0)
    value[val5] = true;
}

//------------------------------------------------------------------------------

IntSet::IntSet(const IntSet &otherSet) : size(otherSet.size){
cout << "In Copy Constructor" << endl;

value = new bool[size];
for(int i = 0; i < size; i++)
    value[i] = otherSet.value[i];
}

//------------------------------------------------------------------------------

IntSet::~IntSet() {
cout << "In Destructor" << endl;

delete[] value;
}

何らかの理由で、デバッグして値を追跡すると、「値」が true(205) に設定されていることがわかります。コンソールにブール値を出力して確認したところ、すべての値が「0」または「1」ではなく「205」として出力されました。何が起こっているのかわかりませんが、問題は bool *value = new bool[size]; にあると思います。私はさまざまなことを試しましたが、何もうまくいかないようです。これを理解したら、コピーコンストラクタとデストラクタに取り組みます。

これはクラスの課題なので、誰かから解決策を得ようとしているわけではありませんが、正しい方向に向ける可能性のあるヒントは大歓迎です!

みんな、ありがとう!

4

1 に答える 1

3

コンストラクターで:

IntSet::IntSet(int val1, int val2, int val3, int val4, int val5);

クラス変数「値」と同じ名前のローカル変数を作成し、クラス宣言を非表示にします。

// Create pointer to boolean array of size "size"
bool *value = new bool[size];

したがって、クラス変数はまだ初期化されています。

結果:

  • ローカル変数の値がメモリ リークを引き起こす
  • クラス変数が定義されていないため、不適切に削除されます - 実行時エラー

代わりに次を使用します。

value = new bool[size];

また

this->value = new bool[size];
于 2013-10-16T11:09:07.280 に答える