[英]Expression _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) Error
[英]_BLOCK_TYPE_IS_VALID(pHead->nBlockUse error Visual Studio 2012
当我尝试删除指针存储器时,出现_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
是一个array ,并且在编译时由编译器静态分配数组。 您不应该delete
它。 仅delete
您的new
,然后delete[]
您的new[]
。 以及为什么要使用旧的C样式数组作为开始,如果您使用std::array
或std::vector
并可以使用简单赋值,则将复制数组(或向量)。
如果在一个函数中本地定义了数组,然后在另一个函数中使用了指向它的指针,则还有另一个可能的问题。 这是因为局部变量函数的局部 (或块里面的功能)它的定义。一旦代码离开局部变量是在那么它的自毁定义的块,如果你有一个指向它的指针变成流浪并指向不再存在的数据,从而导致使用时出现不确定的行为 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.