[英]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.