这种解除分配是否正确?

Pix*_*xel 0 c++ arrays

这种解除分配是否正确?

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

//分配

int* xDump = new int(vSize);
int* yDump = new int(vSize);
Run Code Online (Sandbox Code Playgroud)

//解除分配

delete xDump;
delete yDump;
Run Code Online (Sandbox Code Playgroud)

这种解除分配是否正确?

mig*_*tin 6

这是正确的,只要这样:

int* xDump = new int(vSize);
int* yDump = new int(vSize);
Run Code Online (Sandbox Code Playgroud)

不是应该是这样的:

int* xDump = new int[vSize];
int* yDump = new int[vSize];
Run Code Online (Sandbox Code Playgroud)

如果使用方括号,则动态分配数组.在这种情况下,您需要使用delete []关键字.像这样:

delete[] xDump;
delete[] yDump;
Run Code Online (Sandbox Code Playgroud)

编辑:

如果你真的想要一个动态分配的数组,建议使用std :: vector,而不是使用new/delete创建一个.

例如,以下是在您的情况下如何使用向量:

std::vector<int> xDump(vSize);
std::vector<int> yDump(vSize);

// no need for delete[]
Run Code Online (Sandbox Code Playgroud)

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

  • 除了没有场景我可以想到`new int [vSize]`哪里是正确的.在C++中编写它的方法是`std :: vector <int> xDump(vSize);` (2认同)