ecco, ho terminato
ho evitato puntatori a puntatori di struttura ed ho usato solo puntatore a struttura
codice:
#include <stdio.h>
#include <stdlib.h>
#define n 4
/*
 *
 */

struct stackNode{
    int data;
    struct stackNode *nextPtr;
};

typedef struct stackNode *Stack;


void push(Stack *topPtr, int dat);
int pop(Stack *topPtr);


int main() {

    struct vettore{
        char OP;
        int NUM;
    } V[n];

    Stack stackPtr = NULL;

    char o;
    int nu,i;
    float x,y;
    float app;


    for (i = 0; i < n; i++){
        printf ("Inserire il carattere : \n");
        printf ("'O' se operatore aritmetico\n");
        printf ("'N' se operando\n");
        printf ("'F' se forma polacca terminata\n");
	fflush(stdin);
        scanf ("%c", &o);
        V[i].OP = o;
	   if (o != 'F'){
              printf ("Inserire il numero : \n");
              scanf ("%d", &nu);
              V[i].NUM = nu;
            }
            else{
		("Stringa finita\n");
		}

    }

    for (i = 0; i < n; i++){

        if (V[i].OP == 'N' )
        {
          push (&stackPtr, V[i].NUM);
        }
        if (V[i].OP == 'O'){
            if(!isEmpty(&stackPtr)){
                y = pop(&stackPtr);
                x = pop(&stackPtr);

                if (V[i].NUM == 1){
                    app = (float)(x + y);
                    push(&stackPtr, app);
                }
                if (V[i].NUM == 2){
                    app = (float)(x - y);
                    push(&stackPtr, app);
                }
                if (V[i].NUM == 3){
                    app = (float)(x * y);
                    push(&stackPtr, app);
                }
                if (V[i].NUM == 4){
                    app = (float)(x/y);
                    push(&stackPtr, app);
                }

            }
        }
        if (V[i].OP == 'F'){
            printf ("Forma polacca terminata \n");
            printf ("Risultato %.2f : ",app);
        }
    }

	system("PAUSE");

    return 0;

}

void push(Stack *topPtr, int dat)
{
    Stack newPtr; /*puntatore al nuovo nodo*/

    newPtr = malloc(sizeof(struct stackNode));

    /*inserisce il nodo in cima alla pila*/
 /*newPtr punta al nuovo nodo, in data mette il valore mentre in nextPtr mette il puntatore al top*/
    if (newPtr != NULL){
        newPtr->data = dat; /*assegna il nuovo dato al nuovo nodo */
        newPtr->nextPtr = *topPtr; /*assegna il puntatore alla testa della pila*/
        *topPtr = newPtr; /*ovviamente aggiorna il top della pila con il puntatore al nuovo nodo*/
    }
    else{
        printf("%d non inserito \n", dat);
    }
}

   int pop(Stack *topPtr)
   {
       Stack tempPtr; /*puntatore a un nodo temporaneo */
       int popValore;

       /*Conserva il puntatore al top in tempPtr che servirà per rilasciare la locazione di memoria del nodo prelevato */
       tempPtr = *topPtr;
       /*Preleva il dato dal primo nodo (puntato da topPtr) e lo salva in popValore*/
       popValore = (*topPtr)->data;
       /*il puntatore del nodo prelevato diventa il topPtr*/
       *topPtr = (*topPtr)->nextPtr;
       /*libera la locazione di memoria del nodo da cui si è prelevato il dato*/
       free(tempPtr);

       return popValore;
   }

   int isEmpty(Stack topPtr)
   {
       return topPtr == NULL;
   }
grazie per la pazienza