#include <stdio.h>

#include <stdlib.h>

using namespace std;


typedef struct DynArrayStack{

int top;

int capacity;

int *arr;

}DynArrayStack;


DynArrayStack* CreateStack(int capacity){

DynArrayStack *S=(DynArrayStack*)malloc(sizeof(DynArrayStack));

if(!S)

return NULL;

S->capacity=capacity;

S->top=-1;

S->arr=(int*)malloc(sizeof(int)*S->capacity);

if(!S->arr)

return NULL;


return S;

}

int IsEmptyStack(DynArrayStack *S)

{

return S->top==-1;

}


int IsFullStack(DynArrayStack *S)

{

return S->top==S->capacity-1;

}

void DoubleStack(DynArrayStack *S)

{

S->capacity*=2;

printf("capacity = %d\n", S->capacity);

S->arr=(int*)realloc(S->arr, S->capacity);

int i;

for(i=0; i<S->capacity/2; i++)

printf("%d ", S->arr[i]);

printf("\n");


}

void Push(DynArrayStack *S, int data)

{

if(IsFullStack(S))

{

DoubleStack(S);

}


S->arr[++S->top]=data;


}

int Pop(DynArrayStack *S)

{

if(IsEmptyStack(S))

{

printf("비었음\n");

return 0;

}

return S->arr[S->top--];



}

void DeleteStack(DynArrayStack *S)

{

if(S){

if(S->arr)

free(S->arr);


free(S);

}

}




int main(void)

{


DynArrayStack *S;

S=CreateStack(1);

while(true)

{

int num;

int data;

int exit=-1;

printf("입력 = 1 , 출력 = 2, 종료 = 3 : ");

scanf("%d", &num);


switch(num)

{

case 1:

printf("데이터 입력 = ");

scanf("%d", &data);

Push(S, data);

break;


case 2:

>

printf("출력 값 = %d\n", data);

break;


case 3:

DeleteStack(S);

exit=1;

}

if(exit==1)

break;



}


return 0;

}


요고 스택을 구현한건데

푸시할때 스택이 꽉차면 스택 크기를 두배로 늘리고 거기에 푸시하거든요

근데 스택 크기 두배로 늘릴때 


S->arr=(int*)realloc(S->arr, S->capacity); 

이걸 사용하는데 이거 사용하고 나서 이전의 스택 값이 그대로 유지가 안되더라고요

왜그런지 설명좀 해주실분 그리고 어떻게하면 이거 해결하죠 ㅜ