为什么运行时会出现段错误

上课写的
Feng Gor是著名的房地产商,她每天的主要工作就是——数钱。这并不是一件容易的事,Feng Gor主要投资两类地,一类是圆的,一类是方的。现在你作为她的会计,需要帮她数钱。

Circle类和Square类继承于Land类,分别代表圆的地和方的地,其投资收入根据单位面积价格(price)和地的面积(根据边长或半径算出)决定。

Accountant类用于计算Feng Gor开发各种房地产带来的收入。其中DevelopEstate函数接收一个Land的指针,计算并累加开发这块房地产带来的收入(这里用到了动态绑定哦)。CheckMoney函数返回当前的收入。

`#include
class Land{
    public:
    virtual double landprice()=0;
};
class Circle:public Land{
    private:
    double radius,price1;
    public:
    Circle(double radius_,double price1_):radius(radius_),price1(price1_){}
    double landprice ()override{
      double reward1=0;
      double area1=0;
      area1=radius*radius*acos(-1);
      reward1=area1*price1;
      return reward1;
    }

};
class Square:public Land{
     private:
     double length,price2;
     public:
     Square(double length_,double price2_):length(length_),price2(price2_){}
     double landprice ()override{
      double reward2=0;
      double area2=0;
      area2=length*length*acos(-1);
      reward2=area2*price2;
      return reward2;
    }
};
class Accountant{
     private:
     Land* land;
     double reward;
     public:
     Accountant(){
         reward=0;
         }
     void DevelopEstate(Land* land1){
         reward+=land1->landprice();
     }
     double CheckMoney(){
         DevelopEstate(land);
         return reward;
     }
};
#include 
#include 
#include "source.h"
using namespace std;

int main(int argc, const char *argv[]) {
  Accountant py;
  double r,len;
  int price1,price2;
  cin>>r>>price1>>len>>price2;
  Circle *a = new Circle(r, price1);   //第一个参数为半径,第二个参数为单位面积价格
  Square *b = new Square(len, price2);  //第一个参数为边长,第二个参数为单位面积价格
  py.DevelopEstate(a);
  cout << setprecision(10) << py.CheckMoney() << endl;
  py.DevelopEstate(b);
  cout << setprecision(10) << py.CheckMoney() << endl;

  return 0;
}

main函数是给出的,剩下的是我自己写的
在返回最后结果的函数,我没调用之前输出均为0,调用了之后输出就发生了段错误
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

Accountant的实例py中的属性 land指针,你在哪里赋值的啊?你都没赋值啊,py.CheckMoney()肯定就崩溃了啊
Accountant类改一下:

class Accountant{
     private:
     Land* land;
     double reward;
     public:
     Accountant(){
         reward=0;
         }
     void DevelopEstate(Land* land1){
         land = land1; 
     }
     double CheckMoney(){
         reward+=land1->landprice();
         return reward;
     }