如何释放c ++内存向量<int> * arr?</int>

时间:2011-09-26 14:00:57

标签: c++ vector memory-management std

我有vector<int>* arr,实际上是一个2D数组。

arr =  new vector<int> [size];

我做的好吗

delete arr;

是否会自动删除arr[i],因为它是标准向量?

3 个答案:

答案 0 :(得分:10)

不,您在使用delete[]时应该使用new[]

但这很疯狂。你在一个维度上使用了漂亮的友好容器,然后通过手动动态分配外部维度来取消所有的好处。

相反,只需使用std::vector<std::vector<int> >,或将两个尺寸展平为单个矢量。

答案 1 :(得分:6)

您的代码已损坏。您应该delete[]使用new[]

delete[] arr;

解决此问题后,您的代码将正常运行。

我必须同意评论者的说法,C风格的矢量数组看起来有点疯狂。 为什么不使用向量矢量呢?那将为您处理内存管理。

答案 2 :(得分:2)

你在那里分配一个向量数组。所以你需要删除数组:

delete [] arr;

如果您打算分配'size'元素的向量,则需要:

arr =  new vector<int>(size); // don't use array delete for this though!