簡體   English   中英

動態布爾數組構造函數問題

[英]Dynamic Array of Booleans Constructor Issue

我在使用帶有布爾數組的類的構造函數時遇到問題,該數組通過在該索引處保留“ 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,其余的設置為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]; 盡管我嘗試了許多不同的方法,但似乎沒有任何效果。 一旦弄清楚了,我將解決復制構造函數和析構函數。

這是一個課堂作業,因此我不希望從任何人那里獲得解決方案,但是,可能會向正確的方向指出我的任何提示,我們將不勝感激!

感謝大家!

在構造函數中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM