在这个例子中,我创建了一个包含一个整数的 vector ,然后我从 vector 中删除了这个整数。 vector 的大小变小了,但整数还在!为什么整数还在那里?大小为 0 的 vector 怎么可能包含元素?
#include <vector>
#include <iostream>
using namespace std;
int main(int agrc, char* argv[])
{
vector<int> v;
v.push_back(450);
cout << "Before" << endl;
cout << "Size: " << v.size() << endl;
cout << "First element: " << (*v.begin()) << endl;
v.erase(v.begin());
cout << "After" << endl;
cout << "Size: " << v.size() << endl;
cout << "First element: " << *(v.begin()) << endl;
return(0);
}
输出:
Before
Size: 1
First element: 450
After
Size: 0
First element: 450
最佳答案
您正在通过取消引用无效的内存位置来调用未定义的行为。通常,出于效率目的,堆管理器不会立即释放使用 delete
删除的内存。但是,这并不意味着您可以访问该内存位置,堆管理器可以随时将此内存位置用于其他目的。因此,如果您取消引用无效的内存位置,您的程序将表现出不可预测的行为。
关于c++ - 为什么我可以访问我刚刚从 C++ 中的 STL vector 中删除的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5401635/