删除[]后剩余的堆数组的剩余元素
Remaning elements of a heap array remaining after delete []
我创建了一个 Vector
class 包含一个数组(存储在堆中)和一个整数 n_rows
来计算数组中元素的数量。为了在实例销毁期间正确删除数组,我按照 .
的解释使用了 delete
Class(在头文件中):
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]
我的问题:
此资源是否已正确删除?
为什么只显示前两个元素被修改了?
内存在删除时释放,但不一定overwritten/set为零或类似的东西。访问释放的内存是 未定义的行为 并且任何事情都可能发生,但经常发生(并且在这种情况下发生)的是您获得了删除之前存在的旧值。也就是说,删除的时候,多半只是"marked for being available again".
程序通常不会浪费时间覆盖已删除的内存。如果重新分配内存,那么获取内存的任何东西很可能会根据需要对其进行初始化。
您的析构函数释放 vect
指向的内存,但它不会对该内存的 内容 做任何事情。
取消对无效指针的引用(就像您在对其执行 delete[]
后得到的指针)会导致 undefined behavior。只是不要这样做。
我创建了一个 Vector
class 包含一个数组(存储在堆中)和一个整数 n_rows
来计算数组中元素的数量。为了在实例销毁期间正确删除数组,我按照
delete
Class(在头文件中):
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]
我的问题: 此资源是否已正确删除? 为什么只显示前两个元素被修改了?
内存在删除时释放,但不一定overwritten/set为零或类似的东西。访问释放的内存是 未定义的行为 并且任何事情都可能发生,但经常发生(并且在这种情况下发生)的是您获得了删除之前存在的旧值。也就是说,删除的时候,多半只是"marked for being available again".
程序通常不会浪费时间覆盖已删除的内存。如果重新分配内存,那么获取内存的任何东西很可能会根据需要对其进行初始化。
您的析构函数释放 vect
指向的内存,但它不会对该内存的 内容 做任何事情。
取消对无效指针的引用(就像您在对其执行 delete[]
后得到的指针)会导致 undefined behavior。只是不要这样做。