我有一个指向创建的称为多边形的类的指针向量,该类具有针对不同形状的派生类。相关代码如下所示:
int main() {
vector<polygon*> polygonVec;
polygonVec.push_back(new triangle(2,3,1,2,-1,-4, "triangle 1"));
polygon *tempPolygon;
tempPolygon = new rectangle(1,2,3,4,5,6,7,8, "rectangle 1");
polygonVec.push_back(tempPolygon);
for(vector<polygon*>::iterator itr = polygonVec.begin();
itr != polygonVec.end();
itr++)
{
cout<<*itr<<endl;
}
for(vector<polygon*>::iterator itr = polygonVec.begin();
itr != polygonVec.end();
itr++)
{
delete *itr;
}
polygonVec.clear();
当我在Visual Studio 2012中编译并运行它时,它会按预期运行并提供所需的输出,但最后它会抛出低于错误的消息
“调试声明失败... _BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)”。
谁能告诉我为什么会这样吗?
最佳答案
确保声明您的polygon
析构函数virtual
,否则当您尝试通过指向基数的指针在多态对象上调用delete
时,将具有未定义的行为。
关于c++ - 出现错误“调试断言失败”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30168377/