我试图了解如何在内存中删除指针向量和指向对象。我已经开始使用一个简单的例子,在另一个线程中找到,但我得到“指针被释放未分配”错误。
我做错了什么?
#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();
}
答案 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
,否则不会删除数据。
最重要的是,new
和delete
应始终成对书写。