C++ 动态数组删除旧指针并将其设置为新数组C++;

C++ 动态数组删除旧指针并将其设置为新数组C++;,c++,arrays,dynamic-memory-allocation,C++,Arrays,Dynamic Memory Allocation,我正在尝试实现一个insert()函数,该函数应该将一个值插入到布尔数组中,并将等于该值的索引设置为“true”。IntSet对象有一个指向布尔数组的指针value,还有一个保存数组大小的intsize。SoIntSet A(2,4,10)将创建一个大小为10的数组,2、4、10处的索引将设置为true insert()函数根据插入值与否返回true或false,如果插入值大于数组大小,则应调整数组大小。因此,A.insert(1000)会将数组大小调整为1001,并将索引1000处的值设置为t

我正在尝试实现一个insert()函数,该函数应该将一个值插入到布尔数组中,并将等于该值的索引设置为“true”。
IntSet
对象有一个指向布尔数组的指针
value
,还有一个保存数组大小的int
size
。So
IntSet A(2,4,10)
将创建一个大小为10的数组,2、4、10处的索引将设置为true

insert()函数根据插入值与否返回true或false,如果插入值大于数组大小,则应调整数组大小。因此,
A.insert(1000)
会将数组大小调整为1001,并将索引1000处的值设置为true

我的问题是删除旧的数组指针并将其设置为新的、调整大小的数组。无论我做什么,它总是在删除[]时中断,我不知道为什么

这就是我到目前为止所做的:

bool IntSet::insert(int toInsert) {

int tempSize = this->size;

// if toInsert is greater than the number of elements in the array, call 
// copy constructor and assign new value to true
if(toInsert < this->size && toInsert >= 0) {

    value[toInsert] = true;
    return true;
}
IntSet largerSet(toInsert+1);
if(toInsert > this->size+1) {


    for(int i = 0; i < largerSet.size+1; i++) {

        largerSet.value[i] = false;
    }

    largerSet.value[toInsert] = true;

    for(int i = 0; i < tempSize+1; i++) {

        if(this->value[i] != false) {
            largerSet.value[i] = true;
        }
    }

    std::swap(value, largerSet.value);
    std::swap(size, largerSet.size);
}

return true;
}
bool IntSet::insert(int-toInsert){
int tempSize=此->大小;
//如果toInsert大于数组中的元素数,请调用
//复制构造函数并将新值赋给true
如果(toInsertsize&&toInsert>=0){
值[toInsert]=真;
返回true;
}
IntSet largerSet(toInsert+1);
如果(插入>此->大小+1){
对于(int i=0;i值[i]!=false){
largerSet.value[i]=true;
}
}
std::swap(值,largerSet.value);
标准::交换(大小,largerSet.size);
}
返回true;
}
编辑:用于将值移动到当前数组

我希望我的解释足够清楚,如果您需要更多的澄清,我很乐意提供更多的代码。这是一个课堂作业,所以我不希望有一个直接的答案,但任何能给我指出正确方向的东西都会非常有帮助


谢谢大家

应该将分配留给构造函数,将释放留给析构函数,将副本留给复制构造函数和复制赋值运算符。现在有了一个函数,它可以做一些事情

一个干净的重新分配方法是首先提供一个
swap
函数(交换指针+大小);因此,创建一个新大小的临时数据集(如
largerSet
),初始化新数据,然后用
largerSet
交换数据集。当临时文件超出范围时,它将被销毁,并自动调用
delete[]


现在,当
largerSet
超出范围时,
largerSet.value
会被删除(我假设这是在析构函数中完成的),但现在它等于
value
,所以您的数据就不见了。

非常感谢您提供的信息。问题是我不能再添加任何函数,我们被告知要在insert()中完成调整大小和重新分配。问题是它甚至没有调用delete[],在尝试时只是中断:/Ok然后内联提供交换操作:
std::swap(value,largerSet.value);标准::交换(大小,largerSet.size)。删除
tempSet
newSet
。移除
删除[]
,在析构函数中只保留一个。有一个析构函数,不是吗?谢谢,这肯定解决了将值移动到新数组的问题。但一旦函数超出范围并调用析构函数删除较大的集合,它就会中断。我在插入函数中不再有delete[],我删除了tempSet和newSet。这是我的析构函数:
delete[](这个->值)
this->value=NULL听起来不错。我仍然可以看到可能或可能不会导致程序中断的其他问题(如果条件、循环的大小在
中…)。但是我会倾向于重新编写而不是正确的代码,我需要完整的代码。简而言之,
toInsert
应该是无符号的;第二个
如果不应该在那里;初始化为
false
是无用的,如果允许的话,所有复制都应该是构造函数的一部分。