这种释放是否正确?
vSize -> 动态地,每次运行的值都会改变
// 分配
int* xDump = new int(vSize);
int* yDump = new int(vSize);
// 释放
delete xDump;
delete yDump;
这种解除分配是否正确?
这是正确的,只要这样:
int* xDump = new int(vSize);
int* yDump = new int(vSize);
不应该是这样的:
int* xDump = new int[vSize];
int* yDump = new int[vSize];
如果您使用方括号,则您正在动态分配一个数组。在这种情况下,您需要使用 delete[] 关键字。像这样:
delete[] xDump;
delete[] yDump;
如果您真的想要一个动态分配的数组,建议使用std::vector,而不是使用 new/delete 创建一个。
例如,以下是在您的情况下使用向量的方法:
std::vector<int> xDump(vSize);
std::vector<int> yDump(vSize);
// no need for delete[]
您应该避免拥有指针(指向在堆上分配的内存的指针),而是在必要时尝试在代码中使用智能指针或容器。由于智能指针和容器都利用了非常有用的RAII模式,这将减少程序员错误(即减少内存泄漏的机会)并提高异常安全性。
是的,这是正确的。那里没有问题。
您似乎正在尝试分配一个int
s 数组,在这种情况下它应该是:
int* xDump = new int[vSize];
int* yDump = new int[vSize];
和
delete [] xDump;
delete [] yDump;
这个构造:
int* xDump = new int(vSize);
相当于:
int* xDump = new int;
*xDump = vSize;
...答案是肯定的,这是正确的,因为您没有分配数组。
如果您打算删除此处似乎不是这种情况的数组,则需要调用 delete [] 。但是如果参数 vSize 在方括号 [] 中(也许你想要这个?)那么你绝对应该调用 delete []