繁体   English   中英

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

[英]Dynamic Array deleting old pointer and setting it to new array C++

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

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

我的问题是删除旧的数组指针并将其设置为新的,调整大小的数组。 不管我做什么,它总是在delete []处中断,我不确定为什么。

这是我到目前为止的内容:

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

编辑:用于将值移动到当前数组的交换。

我希望我的解释足够清楚,如果您需要更多说明,我们很乐意提供更多代码。 这是针对班级作业的,所以我不希望直接得到答案,但是任何可以指出正确方向的信息都将为您提供极大的帮助。

谢谢大家!

您应该将分配分配给构造函数,将释放分配给析构函数,将副本复制给复制构造函数以及复制赋值运算符。 您现在有了一个功能,可以完成所有工作。

一种干净的重新分配方法是首先提供swap功能(交换指针和大小)。 鉴于此,请创建一个新大小的临时文件(如largerSet ),初始化新数据,然后将其设置与largerSet交换。 当临时范围超出范围时,它将被销毁,并自动调用delete[]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM