【发布时间】:2015-02-11 03:49:34
【问题描述】:
当我尝试删除指针内存时,我遇到了 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误。我已经检查了代码中的其他位置,似乎我没有重复删除。
谁能指导一下..
enum SHAPE_TYPES {RECTANGLE, TRIANGLE, CIRCLE};
map<SHAPE_TYPES,vector<Shape *>> shapeMap;
vector<Shape *>rectVector;
shapeMap.insert(pair<SHAPE_TYPES, vector<Shape*>>(RECTANGLE,rectVector));
map<SHAPE_TYPES,vector<Shape *>>::iterator mapIter;
mapIter = shapeMap.find(RECTANGLE);
if (mapIter != shapeMap.end())
{
// create the shape
RandomAttributes(R[shapes]);
// the key was found, so add data
shapePtr = R;
mapIter->second.push_back(shapePtr);
}
稍后
map<SHAPE_TYPES,vector<Shape *>>::iterator mapIter;
mapIter = shapeMap.find(RECTANGLE);
if (mapIter != shapeMap.end())
{
if ( !mapIter->second.empty() )
{
mapIter->second.back()->Draw();
delete mapIter->second.back(); // -- error causing line
mapIter->second.pop_back();
}
}
【问题讨论】:
-
什么是
R?shapes是什么?RandomAttributes是做什么的?你能创建一个Minimal, Complete, and Verifiable example 给我们看看吗? -
R 是 Rectangle 类的对象。形状只是 for 循环中的一个计数器,我没有放在这里。它基本上循环等于我插入到地图内的向量中的元素数量。 RandomAttributes 将一些特征分配给不同类的另一个对象。我认为这与删除指针没有任何关系。我已经检查过了,没有析构函数在任何地方删除数据。
-
我们真正需要知道的是您如何声明和初始化
R。它是一个数组吗?你是动态分配的吗? -
MyRect R[NUM_SHAPES]; // NUM_SHAPES 有点像我之前所说的形状计数器。