我在一个类(class)中有一个 const std::vector<double> *vecPtr
。我想正确释放内存,那么我的 destructor
应该是什么样的?
我试过 ~ClassA() { delete[] vecPtr; }
,但出现错误
*** Error in `./test': free(): invalid pointer: 0x00007fff8c643a98 ***
Aborted (core dumped)
delete[]
是否仅在 vector 填充指针时才起作用?编辑:
我像这样使用
vecPtr
:vecPtr = &vec;
如果我只使用
delete
我得到 *** Error in ./test': double free or corruption (fasttop): 0x00000000008fcb20 ***
最佳答案
这取决于您如何创建 vecPtr
。如果你使用 vecPtr = new std::vector<double>
,你应该使用 delete vecPtr;
如果 vecPtr
由 array new
创建,例如 vecPtr = new std::vector<double>[3];
,则应使用 array delete
, delete[] vecPtr;
编辑
如果你使用了 vecPtr = &vec;
,并且如果 vec
是一个自动变量,使用了自动内存,或者 vec
是一个静态变量或全局变量,使用了静态内存,你不应该删除它,它会被自动释放。只能删除动态内存。
关于c++ - 删除指向 vector 的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26754579/