动态数组布尔构造函数问题

问题描述:

我有一个布尔类型数组的类的构造函数的问题,通过在该索引处保存一个“true”值来表示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值,而其余的假。

这是我迄今为止,但我似乎无法得到它的正常工作:

.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];尽管我尝试了很多不同的东西,但似乎没有任何工作。一旦我弄清楚了,我会解决拷贝构造函数和析构函数。

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

谢谢大家!

+1

您的源代码不能编译。请提供[简短,自包含,完整,正确的示例](http://sscce.org)。 – Oswald

+1

对不起,它确实编译:http://ideone.com/pkzQyx只需要一个主要和基本的包含。 它导致运行时错误:yuo创建一个局部变量来映射类变量'value'。 – hauron

+0

[简短,自包含,完整,正确的示例](http://sscce.org)的想法是复制 - >粘贴 - >编译,而不是复制 - >粘贴 - >编译 - >找出哪些错误来自在问题中松散 - >修复这些错误 - >重新编译 - >从文本问题描述中编写一个测试用例 - >编译。 – Oswald

在构造函数中:

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]; 
+0

非常感谢,这绝对有帮助。我注意到由于某种原因我正在创建一个单独的“价值”,但我无法分辨在哪里。另外,打印数组时我得到的“205”值是因为我没有将数组值初始化为false,所以它们会打印0。 – floatfil