최소히프랑 승자트리인데

마지막줄 주석풀면 에러뜨는데 왜 에러뜨는지점 알려줘형들 ㅠㅠ

#include
#include
#include 'windows.h'
#include 'stdlib.h'
#include 'time.h'
using namespace std;

#define MAX_SIZE 2000

class heap
{
private:
int data[MAX_SIZE];
int heapsize;
public:
heap()
{
heapsize = 1;
}

void push(int input)
{

int currentNode;

if (heapsize == 1) data[heapsize++] = input;
else
{
currentNode = heapsize;

while (currentNode > 0 && data[currentNode / 2] > input)
{
data[currentNode] = data[currentNode / 2];
currentNode /= 2;
}
data[currentNode] = input;
heapsize++;
}

}

int pop()
{

int currentNode = 1;
int child = 2;
int ret = data[1];
data[1] = NULL;


int lastE = data[--heapsize];


while (child <= heapsize)
{
if (child < heapsize && data[child] > data[child + 1]) child++;
if (lastE <= data[child]) break;
data[currentNode] = data[child];
currentNode = child;
child *= 2;

}
data[currentNode] = lastE;
return ret;
}

void print()
{
int i;

for (i = 1; i < heapsize; i++)
{
cout << data[i] << ' ';
}
cout << endl;
}
int get_heapsize()
{
return heapsize;
}

};

class winner
{
private:
int data[MAX_SIZE][2];
public:
winner() {
}

void push(heap hp[])
{
int i;

for (i = 4; i <= 7; i++)
{
data[i][0] = hp[i - 4].pop();
data[i][1] = i; //run1, run2, ...run8중 어느run에서 왔는가를 체크함
}

for (i = 3; i >= 1; i--)
{
if (data[i * 2][0] < data[i * 2 + 1][0])
{
data[i][0] = data[i * 2][0];
data[i][1] = data[i * 2][1];
}
else
{
data[i][0] = data[i * 2 + 1][0];
data[i][1] = data[i * 2 + 1][1];
}
}
}

int pop(heap hp[])
{
int ret = data[1][0];//데이타
int iter = data[1][1];//run1,run2,...run8중 어느run에서 왔는가를 체크함

if (hp[iter - 4].get_heapsize() != 1) data[iter][0] = hp[iter - 4].pop();// 최소히프 사이즈가 1일떄 마지막laste가 나간다 사이즈 0일때는 안에 아무것도 없음
else data[iter][0] = 2100000000;//힙사이즈가 1 즉 안에 아무거도 없으면 210000존나큰값을 데이타로 는다 이거는 커서 승자트리위로 안올라감

iter /= 2;

while (iter >= 1)
{
if (data[iter * 2][0] < data[iter * 2 + 1][0])
{
data[iter][0] = data[iter * 2][0];
data[iter][1] = data[iter * 2][1];
}
else
{
data[iter][0] = data[iter * 2 + 1][0];
data[iter][1] = data[iter * 2 + 1][1];
}
iter /= 2;
}

return ret;
}

void print()
{
int i;

for (i = 1; i < 8; i++)
{
cout << data[i][0] << ' ';
}
cout << endl;
}
};

int main()
{
int input;

ifstream is[4];
is[0].open('C:/Users/USER/Desktop/환의/1.txt');
is[1].open('C:/Users/USER/Desktop/환의/2.txt');
is[2].open('C:/Users/USER/Desktop/환의/3.txt');
is[3].open('C:/Users/USER/Desktop/환의/4.txt');


ofstream for_is[4];
for_is[0].open('C:/Users/USER/Desktop/환의/1.txt');
for_is[1].open('C:/Users/USER/Desktop/환의/2.txt');
for_is[2].open('C:/Users/USER/Desktop/환의/3.txt');
for_is[3].open('C:/Users/USER/Desktop/환의/4.txt');

ofstream output[4];
output[0].open('C:/Users/USER/Desktop/환의/5.txt');//파일 출력 ostream객체선언
output[1].open('C:/Users/USER/Desktop/환의/6.txt');
output[2].open('C:/Users/USER/Desktop/환의/7.txt');
output[3].open('C:/Users/USER/Desktop/환의/8.txt');
ofstream outputfinal('C:/Users/USER/Desktop/환의/final.txt');

winner win1;
winner win2;

heap hp1[4];
srand(time(NULL));


////////////////////////////run1~4텍스트파일에 난수10개 넣어주기
for (int j = 0; j < 4; j++) {

for (int i = 0; i < 10; i++)
{

for_is[j] << rand() % 1000 << ' ';
}
for_is[j].close();
}

////////////////////////////최소히프에 run1~4를 넣는다.
for (int i = 0; i < 4; i++)
{
while (!is[i].eof())
{
is[i] >> input;
hp1[i].push(input);

}
is[i].close();
}

win1.push(hp1);

while ((input = win1.pop(hp1)) != 2100000000)
{
cout << input << ' ';
output[0] << input << ' ';

}
output[0].close();
////마지막줄 주석풀면에러//////////////////총 4개의 win 객체를 만들려고하는데 왜 win1은 잘되는데 그다음 win2를 만들려고하면 이렇게 에러가 뜰까??
////////////////////////////////////////hp객체를 새로만들어서 랜덤값 새로값을 다받아줘도 이러는데ㅠㅠ push가 뭔가이상한거같은데 알려줘 ㅠㅠ

/*
win2.push(hp1);

while ((input = win2.pop(hp1)) != 2100000000)
{
cout << input << ' ';
output[0] << input << ' ';//나온 결과값을 txt파일에 넣고

}
output[0].close();//ofstream를 닫는다.
*/
}

- dc official App