我有以下代码:
class MyList
{
private:
public:
int* list;
int size = 0;
int max;
// constructor
MyList(int s)
{
max = s;
size = 0;
if(max > 0)
list = new int[max];
};
// destructor
~MyList()
{
for (int x = 0; x < max; x++)
delete (list + x);
};
};
我试图用析构函数清除内存。但是,它会在第二次迭代时抛出错误。我做错了什么?此外,它不会让我这样做:
delete list[x];
有人可以向我解释原因吗?非常感谢你。
答案 0 :(得分:6)
您应该使用delete[]
,因为list
是通过new[]
- 表达式创建的。 e.g。
// destructor
~MyList()
{
delete[] list;
}
请注意,它们必须成对; new int[max]
创建一个包含max
个元素的数组,delete[]
销毁整个数组。 delete
只应用于由new
创建的指针。
最好将构造函数更改为
// constructor
MyList(int s)
{
max = s;
size = 0;
if(max > 0)
list = new int[max];
else
list = nullptr;
}
确保list
始终有效。
答案 1 :(得分:2)
试试这个:
MyList(int s)
: max(s),
size(0),
list(new int[s])
{
};
~MyList()
{
delete[] list;
};
答案 2 :(得分:0)
我明白你为什么要用 释放内存的循环......你应该简单地写一下
删除[]列表;
这就足够了! 在你的析构函数中,你正在使用delete(list(一个指针)+ x)这不会释放你创建的内存... 您正在尝试通过在其中添加x循环的值来删除列表旁边的地址 我希望你理解你的错误:)