0

这种释放是否正确?

vSize -> 动态地,每次运行的值都会改变

// 分配

int* xDump = new int(vSize);
int* yDump = new int(vSize);

// 释放

delete xDump;
delete yDump;

这种解除分配是否正确?

4

5 回答 5

6

这是正确的,只要这样:

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模式,这将减少程序员错误(即减少内存泄漏的机会)并提高异常安全性。

于 2013-04-16T10:06:15.617 回答
3

是的,这是正确的。那里没有问题。

于 2013-04-16T10:03:02.787 回答
3

您似乎正在尝试分配一个ints 数组,在这种情况下它应该是:

int* xDump = new int[vSize];
int* yDump = new int[vSize];

delete [] xDump;
delete [] yDump;
于 2013-04-16T10:07:23.970 回答
0

这个构造:

int* xDump = new int(vSize);

相当于:

int* xDump = new int;
*xDump = vSize;

...答案是肯定的,这是正确的,因为您没有分配数组。

于 2013-04-16T10:18:01.533 回答
0

如果您打算删除此处似乎不是这种情况的数组,则需要调用 delete [] 。但是如果参数 vSize 在方括号 [] 中(也许你想要这个?)那么你绝对应该调用 delete []

于 2013-04-16T10:12:05.610 回答