删除[]后剩余的堆数组剩余元素

时间:2018-10-08 09:14:26

标签: c++

我创建了一个Vector类,其中包含一个数组(存储在堆中)和一个整数n_rows,该整数计算数组中的元素数量。为了在实例销毁期间正确删除阵列,我使用了here中所述的delete

类(在头文件中):

private:
    int n_rows;
    int* vect;

public:
    Vector(int);
    ~Vector();
    std::string toString(); // returns elements from vect

析构函数(在.cpp中):

Vector::~Vector(){
    delete [] this->vect;
    cout << this->toString() << endl;
}

但是,如果我在删除数组vect之后将其打印出来,似乎只有前两个条目被删除了。

示例:

// Vector:
[2 2 2 2 2 2]

// Destruction
[0 0 2 2 2 2]

我的问题: 此资源是否已正确删除? 为什么只是看起来前两个元素被修改了?

2 个答案:

答案 0 :(得分:3)

您的析构函数释放了getSearchData(){ this.subscription = this.api.getServerData(this.searchString.toUpperCase()).subscribe((response: any) => { console.log("back with data :-",response); }, error => { if (response.status == 403) { this.getSearchData(); }else{ console.log("InLine Error : ",response); this.showAlert('Error', 'Something went wrong. please try again.'); } }); } 所指向的内存,但对该内存的内容没有任何作用。

取消引用无效的指针(如对vect进行处理后得到的指针)将导致undefined behavior。只是不要这样做。

答案 1 :(得分:2)

当删除内存时,内存将被释放,但不一定会被覆盖/设置为零或类似的值。访问释放的内存是未定义的行为,并且可能会发生任何事情,但是经常发生的情况(在这种情况下也是如此)是您获得了删除之前的旧值。换句话说,将其删除后,大多只是“标记为可以再次使用”。

程序通常不会浪费时间在已删除的内存上。如果重新分配了内存,则无论如何获取内存都将对其进行初始化,无论如何还是要这样做。