这种解除分配是否正确?

时间:2013-04-16 10:01:41

标签: c++ arrays

这种解除分配是否正确?

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

//分配

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

//取消分配

delete xDump;
delete yDump;

这种解除分配是否正确?

5 个答案:

答案 0 :(得分: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[]

您应该避免拥有指针(指向堆上分配的内存的指针),而是在必要时尝试在代码中使用smart pointerscontainers。由于smart pointerscontainers都利用了非常有用的RAII模式,这将减少程序员错误(即减少内存泄漏的可能性)并增加异常安全性。

答案 1 :(得分:3)

是的,这是正确的。没问题。

答案 2 :(得分:3)

您似乎正在尝试分配int s的数组,在这种情况下它应该是:

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

delete [] xDump;
delete [] yDump;

答案 3 :(得分:0)

如果您打算删除一个在这里似乎不是这种情况的数组,则需要调用delete []。但是如果参数vSize在方括号[]中(可能你想要这个?)然后你肯定应该调用delete []

答案 4 :(得分:0)

这个结构:

int* xDump = new int(vSize);

相当于:

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

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