如果我为一个vector预留了大量的内存,(后面会用数据填充),预留的内存可以被别人使用吗?
例如,
vector<double* > vD;
vD.reserve(30000000); // the number is less than the maximum size of a vector
... ...
for(int i=0; i< 1000000; i++)
{
double * pF = new double; // will be pushed back to the vector
... ...
vD.push_back(pF);
delete pF;
}
pF = NULL;
上面的代码只是展示了这个想法。在实际代码中,double 是一个包含指针的自定义对象。当我运行代码时,我因信息崩溃:释放堆块 3bab8 在 3bacc 被释放后修改。确切的内存地址(3bab8 和 3bacc)会改变。当我检查我的向量时:
for _First --- 0x28df0020
_Last 0x28df0870
_End 0x3ece3c20
据我了解,为 vD 保留的内存应该是 0x28df0020 和 0x3ece3c20。如果我理解这个权利,那么保留的内存就不会受到影响。我对吗?那为什么我在释放后会修改堆块?我应该如何处理?谢谢。