-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)。我通过在控制台中输出布尔值进行检查,所有值都打印为“205”而不是“0”或“1”。我不确定发生了什么,但我认为问题在于 bool *value = new bool[size]; 虽然我尝试了很多不同的东西,但似乎没有任何效果。一旦弄清楚这一点,我将处理复制构造函数和析构函数。

这是一项课堂作业,所以我不希望从任何人那里得到解决方案,但任何可能为我指明正确方向的提示都非常感谢!

感谢大家!

4

1 回答 1

3

在构造函数中:

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

您创建一个与类变量“value”相同的局部变量,它隐藏了类声明。

// 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 回答