모두의 코드 커뮤니티

C++ 객체의 가상함수를 사용할 때 세그멘테이션 오류 발생

안녕하세요
대학과제를 하는 중에 세그멘테이션 오류로 인해 골치가 아픕니다.
포인터 벡터에 종속클래스의 객체를 집어넣은 후 출력하려고 합니다.
출력함수 draw()는 가상함수이고 -> 를 사용해서 하고싶은데 세그멘테이션 오류가 발생합니다.

다음은 코드입니다.

#include
#include
#include
using namespace std;

class Point
{
private:
int x, y;
public:
Point(){}
Point(int a, int b): x(a), y(b) {}
friend ostream& operator << (ostream& os, const Point& p);
};

// Point object 의 출력 오퍼레이터 지원
ostream& operator << (ostream& os, const Point& p)
{
os <<"(" << p.x << ", " << p.y << “)”;
return os;
}
//Base class 생성
class Figure
{
private:
string Name;
public:
Figure(){}
//virtual 함수인 draw() 를 선언
virtual void draw() = 0;
};

//Figure 클래스를 종속받는 Rectangle 클래스
class Rectangle: public Figure
{
//두 개의 Point 객체를 Private 멤버로 가진다.
private:
Point vertex1;
Point vertex2;
public:
Rectangle(){}
Rectangle(const Point& p1, const Point& p2): vertex1(p1), vertex2(p2){};
virtual void draw();
void setVertex(int a, int b, int c, int d);
};

void Rectangle::draw()
{
cout << "A Rectangle from " << vertex1 << " to " << vertex2 << endl;
}

void Rectangle::setVertex(int a, int b, int c, int d)
{
vertex1 = Point(a, b);
vertex2 = Point(c, d);
}

//Figure 클래스를 종속받는 Circle 클래스
class Circle: public Figure
{
private:
Point center;
int radius;
public:
Circle(){}
Circle(const Point& p, int a): center§, radius(a){};
virtual void draw();
void setCircle(int a, int b, int c);
};

void Circle::draw()
{
cout << "A Circle wtih the center of " << center << " and the radius of " << radius << endl;
}

void Circle::setCircle(int a, int b, int c)
{
center = Point(a, b);
radius = c;
}

int main()
{
string figName;
cout << " Enter figure type of draw: ";
Figure* P_Fig;
vector <Figure*> figList(100);

int size = 0;
while(1)
{
    cout << "Enter figure type of draw: ";
    cin >> figName;
    if(figName == "Rectangle")
    {   
        int a, b, c, d;
        Rectangle* P_Rec = new Rectangle;

        cout << "Enter x, y coordinates of P1: ";
        cin >> a >> b;

        cout << "Enter x, y coordinates of P2: ";
        cin >> c >> d;

        P_Rec -> setVertex(a, b, c, d);

        P_Fig = P_Rec;
        figList.push_back(P_Fig);
    }

    else if(figName == "Circle")
    {
        int a, b, c;
        
        Circle* P_Cir = new Circle;

        cout << "Enter x, y coordinates of center: ";
        cin >> a >> b;
        
        cout << "Enter the radius: ";
        cin >> c;

        P_Cir -> setCircle(a, b, c);

        P_Fig = P_Cir;
        figList.push_back(P_Fig);
    }
    else if(figName == "draw")
    {
        break;
    }
    else
    {
        cout << "Enter 'Rectangle' or 'Circle'.\nTo draw figure, enter 'draw'";
    }
    size++;
}

for(int i = 0; i <= size; i++)
{
    figList[i]->draw();
}

return 0;

}

코드 블록을 사용해서 글을 올려주세요

마지막에

for(int i = 0; i <= size; i++)
{
    figList[i]->draw();
}

에서 i < size 가 맞을 것 같네요. size 가 현재 figList 에 등록된 객체의 갯수이니까요.