我有一个指向创建的称为多边形的类的指针向量,该类具有针对不同形状的派生类。相关代码如下所示:

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/

10-13 08:25