Ciao a tutti!
Ho un problema con un esercizio sugli stack. L'esercizio chiede di creare due stack , A e B; uno da cui prelevare elementi (A), uno in cui inserire elementi (B). Nel caso in cui lo stack A sia vuoto devono venire spostati, mediante pop-push gli elementi dallo stack B allo stack A.
Il problema sta nell'inserimento di elementi nello stack B, quindi credo nella funzione stack_push, riporto l'intero codice per completezza, spero qualcuno possa aiutarmi, grazie.

codice:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

#define GROW_DELTA 10
#define SHRINK_DELTA 20

typedef int TInfo;

struct SArray{
   TInfo *item;
   int length;
   int size;
   };
typedef struct SArray TArray;

struct SStack{
   TArray array;
   };
typedef struct SStack TStack;

TArray array_create(int initial_length){
   TArray a;
   a.item=(TInfo*)malloc(sizeof(TInfo)*initial_length);
   assert(a.item!=NULL);
   a.length=initial_length;
   a.size=initial_length;
   }

void array_destroy(TArray *a){
   free(a->item);
   a->item=NULL;
   a->length=0;
   a->size=0;
   }

void array_resize(TArray *a,int new_length){
   if(new_length > a->size || new_length < a->size -SHRINK_DELTA){
      int new_size=new_length+GROW_DELTA;
      a->item=realloc(a->item, sizeof(TInfo)*new_size);
      assert(a->item!=NULL || new_size!=0);
      a->size=new_size;
      }
   a->length=new_length;
   }

TStack stack_create(void){
   TStack s;
   s.array=array_create(0);
   return s;
   }

void stack_destroy(TStack *s){
   array_destroy(&s->array);
   }

void stack_push(TStack *s, TInfo x){
   int n=s->array.length;
   array_resize(&s->array, n+2);

   s->array.item[n]=x;
   }

TInfo stack_pop(TStack *s){
    int n=s->array.length;
    TInfo x=s->array.item[n-1];
    array_resize(&s->array, n-1);
    return x;
   }

TInfo stack_top(TStack *s){
   int n=s->array.length;
   return s->array.item[n-1];
   }

bool stack_is_empty(TStack *s){
   return s->array.length==0;
   }

int menu(){
   printf("\n1) Inserire un elemento.\n");
   printf("2) Prelievo di un elemento.\n");
   printf("3) Verifica coda vuota.\n");
   printf("4) EXIT.\n\n");
   printf("Fai la tua scelta :  ");
   }

int main(){

   TStack stackA,stackB;
   int scelta=0;
   TInfo elemento;

   stackA=stack_create();
   stackB=stack_create();

printf("----> %d", stackB.array.length);

   while(scelta!=4){
      menu();
      scanf("%d", &scelta);

      switch(scelta){

         case 1 :   printf("Inserire il nuovo elemento :\n");
                    scanf("%d", &elemento);
                    stack_push(&stackB, elemento);
            break;

         case 2 : if(stack_is_empty(&stackA)){
                       while(stackB.array.length!=0)
                           stack_push(&stackA , stack_pop(&stackB));
                       elemento=stack_pop(&stackA);
                       printf("ELEMENTO  %d   \n", elemento);
                       }

                    else {
                       elemento=stack_pop(&stackA);
                       printf("%d   \n", elemento);
                       }
            break;

         case 3 :
            break;

         }
      }
   return EXIT_SUCCESS;
   }