C ++ Debug Assertion指针失败

时间:2014-02-15 05:59:35

标签: c++ class pointers inheritance polymorphism

我使用类,继承和多态写了一个非常小的程序。在主要部分中,我已经使用new声明了一个指针,当我调用delete并调试程序时,它崩溃了。

无论如何,这是我的代码

#include <iostream>
using namespace std;

class Shape{
protected:
    int height;
    int width;
public:
    void getVal(int num1, int num2){
        height = num1;
        width = num2;
    }
    int printVal(){
        return (width * height);
    }
};

class Rectangle: public Shape{};

int main(){
    Rectangle rec;
    Shape* shape = new Rectangle;
    shape = &rec;
    shape ->getVal(2,2);
    cout << "Your answer is: " << shape ->printVal() << endl;
    delete shape;
    system("pause");
    return 0;
} 

谢谢

1 个答案:

答案 0 :(得分:1)

Shape* shape = new Rectangle;
shape = &rec;

您正在堆上分配一个对象,然后立即泄漏它。 shape现在指向rec,一个自动对象。

delete shape;

shape当前指向的对象尚未使用new进行分配,因此在其上调用delete会显示未定义的行为。