了解删除[] c ++

时间:2017-12-04 19:28:02

标签: c++ delete-operator

最重要的是让我说我​​已经找到了答案,我找不到任何解释为什么我遇到问题。

我是学生,我现在正在学习C ++

所以在告诉我不要以这种方式使用C ++之前,请允许我告诉你,它是出于学习目的和对某些概念的理解。

程序在最后一次声明时崩溃。 delete [] tempVector; 我无法理解为什么它会发生,因为delete [] vector;工作得很好。

错误:使用arr.exe播放已触发断点

请帮助我理解我做错了什么。

非常感谢你。

class BetterArray
{
private:

    int* vector;
    int count;

public:

    BetterArray(int value);
    BetterArray(int* vec, int size);
    ~BetterArray();

    void add(int value);

    int* getArray();

};

BetterArray::BetterArray(int value)
{
   count = 1;

   vector = new int[1];
   vector[0] = value;   
 }

void BetterArray::add(int value){

    int* tempVector = new int[count + 1];

    for (int i = 0; i < count; i++)
        tempVector[i] = vector[i];

    tempVector[count] = value;

    count++;

    delete[] vector;

    vector = tempVector;

    delete[] tempVector; // programa crahses here.
}

1 个答案:

答案 0 :(得分:3)

delete上的崩溃通常是堆损坏的结果。将tempVector指针指向vector时,指针指向同一内存位置。因此,删除tempVector也会删除vectorvector现在指向未分配的内存。

现在假设您写入vector,您正在写入未分配的内存,这将破坏堆。在此之后会发生什么是未定义的行为,但如果堆管理器检测到损坏,它通常会崩溃。