繁体   English   中英

_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse错误Visual Studio 2012

[英]_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::arraystd::vector并可以使用简单赋值,则将复制数组(或向量)。

如果在一个函数中本地定义了数组,然后在另一个函数中使用了指向它的指针,则还有另一个可能的问题。 这是因为局部变量函数的局部 (或块里面的功能)它的定义。一旦代码离开局部变量是在那么它的自毁定义的块,如果你有一个指向它的指针变成流浪并指向不再存在的数据,从而导致使用时出现不确定的行为

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM