Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116

    [C] ritorno locazione di memoria anziche dato

    allora, ho da letto come funzionano le liste...e i problemi iniziano gia a farsi sentire,

    posto tutto il codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct ele
    {
     int a;
     struct ele *next;
    };
    
    struct lista
    {
     int num_ele;
     struct ele *top;
    };
    
    
    void inizial (struct lista *lis);
    void ins_ele (int dato, struct lista *lis);
    void del_ele (struct lista *lis);
     int estrai(struct lista *lis);
     int leggi (struct lista *lis);
    
    main()
    {
     system("color 0a");
     int i,j,k,h;
     
     struct ele *n;
     n =(struct ele *)malloc(sizeof(struct ele));                    
     
     struct lista *p;
     p =(struct lista *)malloc(sizeof(struct lista));          
     inizial(&(*p));           
     
     printf("\n\n\tCaricamento della lista\n");
    
    
    printf("Inserire il numero degli elementi che si desidera inserire:");
    scanf("%d",&i);
    
     for (j=1;j<=i;j++)
     {
      printf("Inserire elemento:");
      scanf("%d",k);
      ins_ele(k,&(*p));
     };
     system("cls");
     printf("\n\n\tCaricamnt Eseguito.\n");
     system("pause");
     system("cls");
      printf("\n\n\tEstrazione Lista:\n");
     
     while (p->num_ele!=0)
     {
       h = estrai(&(*p));
       printf("Elemento estratto: %d\n", h); /* Qui e il Problema*/
     }; 
     printf("\n\n");
     system("pause");        
    };
    
    
    void inizial(struct lista *lis)
    {
     lis->num_ele=0;
     lis->top=NULL;
         
    };
    
    
    
    void ins_ele (int dato, struct lista *lis)
    {
     struct ele *n;
     n = (struct ele *)malloc(sizeof(struct ele));
     if (n == NULL)
            { 
              system("cls");  
              printf("\n\n\n\t\tMemoria non sufficente, il programma verra\' arrestato!\n\n\n\n\n");
              system("pause");
              exit(1);
            }
                           
     n->a = dato;
     n->next =lis->top;
     lis->top = n;
     lis->num_ele++ ;   
    };
    
    void del_ele (struct lista *lis)
    {
         struct ele *n;
         lis->num_ele--;
         n=lis->top;
         lis->top=n->next;
         free(n);
    };
    
    int leggi (struct lista *lis)
    {
        struct ele *n;
        lis->top=n;
        int b = n->a;
        
        return(b);
    };
    
    int estrai(struct lista *lis)
    {
     struct ele *n;
     int z;
     
     n=lis->top;
     z=n->a;
     lis->top = lis->top->next;
     lis->num_ele--;
     
     free(n);   
     return z;   
    }

    come si può ben notare e un classico programma per caricare e scaricare una lista..niente di che, il problema e allo scaricamento, infatti nel ciclo while in cui iene eseguita n volte la funzione estrai(struct lista *lis) la restituzione è la locazione di memoria di a [overo la variabile della struttura Elemento contenente il dato]

    e da 2 ore ke ci sto sopra.....aiuto
    codice:
     $(".canaglia").show()

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intanto noto che

    1) nel main la scanf dovrebbe essere

    scanf("%d", &k);

    e non

    scanf("%d", k);


    2) nella funzione leggi la struttura puntata da n NON e' allocata ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Ifrit
    Registrato dal
    Oct 2005
    Messaggi
    116
    queste sono quelle situazioni inbarazzanti che non sai dove mettere la faccia


    1. si il problema era quello... appena ho corretto funziona


    2. si vero hai ragione, grazie ancona


    che dire, 2 piccioni con una fava [e' italiano fava o e solo una mia italianizzazione dal dialetto? vabe...]


    grazie mille, mi sa che dopo l'esame mi tocca pagare una birra a tutti xD
    codice:
     $(".canaglia").show()

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.