il codice è scritto in c++, non ci sono errori di sintassi, ma stranamente quando provo ad inserire il secondo elemento esce dal programma...

il programma dovrebbe inserire in memoria numeri, ordinati all'inserimento..

ecco il listato:

Codice PHP:
//non è pho l'ho inserito tra i tag PHP per non perdere la formattazione!
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct nodo
  
{
    
nodo *prec;
    
int anni;
    
nodo *succ;
  };

      
nodo *plista, *pfantoccio;
      
nodo *pbuff;
      
int risp,numero,ritorno;

//funzione inserimento      
int inserisci(int dato)
{

if (
plista==NULL) {

                 
plista=(nodo*)malloc(sizeof(nodo)); //alloca un nuovo nodo
                 
plista->anni=dato//allora l'eta
                 
plista->prec=NULL;  //prec e succ puntano a null
                 
plista->succ=NULL;

                 return 
1;
               } else {

  
pbuff=(nodo*)malloc(sizeof(nodo)); //alloca in ogni caso un nuovo nodo
  
pbuff->anni=dato//allora in ogni caso l'eta

if (plista->anni dato) {
                          
//se il dato da inserire e' minore del dato puntato da plista scorre indietro finche la condizione non cambia oppure plista->prec=NULL (a questo punto inserirebbe in testa)
                          
while (plista->anni dato || plista->prec!=NULL){
                                
plista=plista->prec;
                                }
                                
//riordino i puntatori
                                
pfantoccio=plista->prec;
                                
plista->prec=pbuff;
                                
pbuff->succ=plista;
                                
pbuff->prec=pfantoccio;  //pfantoccio puo essere NULL o un indirizzo
                                
return 2;
                       } else {
                               
//se il dato da inserire e' maggiore del dato puntato da plista scorre avanti finche la condizione non cambia oppure plista->succ=NULL (a questo punto inserirebbe in coda)
                          
while (plista->anni dato || plista->succ!=NULL){
                                
plista=plista->succ;
                                }
                                
//riordino i puntatori
                                
pfantoccio=plista->succ;
                                
plista->succ=pbuff;
                                
pbuff->prec=plista;
                                
pbuff->succ=pfantoccio;
                                return 
3;
                              }
                      }
}

int main()
{
plista=NULL;      
while(
risp!=3)
                  {
                    
printf("_______OPERAZIONI_______\n");
                    
printf("\n");
                    
printf("1. Inserisci\n");
                    
printf("2. Visualizza\n");
                    
printf("3. Esci\n");
                    
printf("________________________\n");
                    
scanf("%i",&risp);
                      if (
risp==1) {
                                      
//operazione inserisci
                                      
printf("Dammi il numero da inserire\n");
                                      
scanf("%i",&numero);
                                      
ritorno=inserisci(numero);

                                        if (
ritorno==1) {
                                               
printf("E' il primo inserimento\n");
                                          } else if (
ritorno==2){
                                               
printf("Ho inserito a sinistra del puntatore\n");
                                          } else if (
ritorno==3){
                                               
printf("Ho inserito a destra del puntatore\n");
                                          } else {
                                              
printf("Errore nell'inserimento\n");
                                                 }
                                      
//fine inserisci
                                      
                      
} else if (risp==2) {
                      
//operazione visualizza, da completare
                      
} else if (risp==3) {
                      
//nessun istruzione, esce;
                      
}
                      else {
                      
//operazione non valida
                      
printf("Operazione non valida! \n");
                      }
                    }

provatelo e cercate di trovare l'errore.. io proprio non capisco.. grazie