簡體   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