如何从指向对象的向量中删除对象?

时间:2013-07-07 22:29:24

标签: c++ memory vector

我试图了解如何在内存中删除指针向量和指向对象。我已经开始使用一个简单的例子,在另一个线程中找到,但我得到“指针被释放未分配”错误。

我做错了什么?

#include <vector>
#include <algorithm>
#include <iostream>

int main(){
    std::vector <int *> vec;

    int a = 2;
    int * b = &a;

    int c = 3;
    int * d  = &c;

    vec.push_back(b);
    vec.push_back(d);

    for (int i = 0; i < vec.size(); i++) {
        delete vec[i];
    }
    vec.clear();

}

3 个答案:

答案 0 :(得分:3)

仅对使用new创建的变量调用delete 检查此链接: Calling delete on variable allocated on the stack

答案 1 :(得分:2)

您正在释放使用自动存储在堆栈上分配的内存。这就是你收到错误的原因。

仅使用delete分配的new项内容。 RAII会照顾其他人。

答案 2 :(得分:0)

当你这样做时

int a = 2;

您正在堆栈上分配一个int,并且堆栈上的任何内容都不需要delete,一旦我们离开声明的作用域,它将自动释放。因此,在您的代码中,您试图两次释放相同的东西。

如果你这样做

int* a = new int(2);

然后,您将在堆上分配一个int,除非您明确调用delete,否则不会删除数据。

最重要的是,newdelete应始终成对书写。