我使用类,继承和多态写了一个非常小的程序。在主要部分中,我已经使用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;
}
谢谢
答案 0 :(得分:1)
Shape* shape = new Rectangle;
shape = &rec;
您正在堆上分配一个对象,然后立即泄漏它。 shape
现在指向rec
,一个自动对象。
delete shape;
shape
当前指向的对象尚未使用new
进行分配,因此在其上调用delete
会显示未定义的行为。