A 클래스 선언
class A
{
private:
string *str;
...
public:
A()
{
str = new string[10];
...
}
~A()
{
delete[] str;
}
}
B 클래스 선언
class B
{
private:
string *str1;
int *arr;
...
public:
B()
{
str1 = new string[10];
arr = new int[10];
}
~B()
{
delete[] str1;
delete[] arr;
}
C 클래스 선언
class C
{
private:
B *queue;
...
public:
C()
{
queue = new B[1000];
...
}
~C()
{
delete[] queue;
}
main 함수
void main()
{
...
A *a = new A[1000];
B *b = new B[1000];
....
delete[] a;
delete[] b;
}
위 소스코드에서 각 클래스의 생성자, 소멸자와 main내의 new, delete에서 문법상으로 잘못된게 있나요?
중간에 소스코드를 많이 생략했지만, 오류가 발생합니다. (C 클래스가 queue의 역할을 하는 클래스인데, queue에 삽입이 제대로 되지를 않습니다.)
그래서 임의로 A클래스의 소멸자 (str 배열)을 없애보았더니 오류가 없었습니다.
B클래스의 소멸자만 없애도 오류가 없고, C클래스의 소멸자만 없애도 오류가 발생하지 않았구요.
main 내에서 a배열은 상관이 없고 b배열에 대한 delete만 삭제해줘도 오류가 발생하지 않았습니다.
대체 뭐가 문제일까요..? 혹시 풀 소스코드가 필요하시다면.. 올려보겠습니다만 너무 길어서.. 최대한 축약했습니다.