【问题标题】:How to free c++ memory vector<int> * arr?如何释放 C++ 内存向量<int> * arr?
【发布时间】:2011-09-26 14:00:57
【问题描述】:

我有一个vector&lt;int&gt;* arr,实际上是一个二维数组。

arr =  new vector<int> [size];

我就这样好吗

delete arr;

arr[i] 是标准向量,会被自动删除吗?

【问题讨论】:

  • Yuk @ 动态分配容器。为什么?
  • 如果你为我工作,我会因为你写这样的代码而解雇你。
  • 谢谢你们的帮助,非常感谢。我试图实现向量的向量,这个codepedia.com/1/Cpp2dVector 是一个很大的帮助

标签: c++ vector memory-management std


【解决方案1】:

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

但这太疯狂了。您在一个维度上使用了很好的快乐友好容器,然后通过对外部维度进行手动动态分配来消除所有优点。

相反,只需使用std::vector&lt;std::vector&lt;int&gt; &gt;,或将两个维度展平为一个向量。

【讨论】:

  • 这对于“但这太疯狂了”值得 +1。
【解决方案2】:

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

delete[] arr;

修复此问题后,您的代码将正常工作。

我必须同意评论者的观点,即 C 样式的向量数组看起来有点疯狂。 为什么不使用向量向量呢?这将为您处理内存管理。

【讨论】:

  • 我不会将创建 vectors 的 C 样式数组称为“很好”。我会称之为疯狂。
  • 真的,真的。如果您不能使用静态分配,请使用某种托管指针。如果不出意外,它将为您带来异常安全。
【解决方案3】:

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

delete [] arr;

如果您打算分配一个包含“大小”元素的向量,您需要:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2016-11-17
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多