Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    95

    [c] problema con le liste

    Scusate, ma è da poco che sto imparando il linguaggio C. Non riesco proprio a capire questo problema, dunque ho una lista, con due campi informazione ed un puntatore,
    nel main assegno alla lista determinati valori, attraverso la funzione NewNotifiy. Questa funzione, se la lista è vuota la riempie con i dati passategli per argomento,altrimenti scorre la lista fino alla fine e aggiunge poi i nuovi dati.
    Il problema è quanto tento di stampare i valori della lista. Il programma mi si blocca e mi dà errore.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct _NOTIFIES{long event;long notify;struct _NOTIFIES* pointer;};
    typedef struct _NOTIFIES* NOTIFIES;
    NOTIFIES NewNotify(NOTIFIES notifies,long event, long notify);
    
    
    int main()
    {
        static NOTIFIES n;
        n=NewNotify(n,7,8);
        n=NewNotify(n,9,80);
        printf("primi valori inseriti: %d  %d \n",n->event,n->notify);
        n=n->pointer;
        printf("altri valori inseriti: %d  %d \n",n->event,n->notify);
        return 0;
    }
    
    NOTIFIES NewNotify(NOTIFIES notifies,long event, long notify)
    {
        NOTIFIES cursor;
        if(notifies==NULL)
        {
            notifies=(NOTIFIES)malloc(sizeof(struct _NOTIFIES));
            if(notifies!=NULL)
            {
                notifies->event=event;
                notifies->notify=notify;
                notifies->pointer=NULL;
            }
        }
        else
        {
            cursor=notifies;
            while(cursor!=NULL){cursor=cursor->pointer;}
            cursor=(NOTIFIES)malloc(sizeof(struct _NOTIFIES));
    
            if(cursor!=NULL)
            {
                cursor->event=event;
                cursor->notify=notify;
                cursor->pointer=NULL;
                notifies=notifies->pointer;
            }
        }
        return notifies;
    }

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    ciao, prima di ogni cosa, appena crei il puntatore alla lista:
    codice:
    static NOTIFIES n;
    devi subito inizializzarlo a NULL altrimenti la lista potrebbe dare problemi!
    Poi ci sono dei problemi nella funzione di inserimento nella lista in quanto quando il puntatore della testa della lista non è NULL devi scorrere la lista fino a quando non incontri NULL però comunque ti devi memorizzare il puntatore all'ultimo "blocco" allocato in modo tale che puntatore(ultimoBlocco)->pointer = NULL; a questo punto allochi un nuovo blocco della struct ma non devi usare lo stesso puntatore con il quale hai percorso tutta la lista, ma un nuovo puntantore! comunque ti posto tutto il codice corretto e dimmi se c'è qualcosa che non va...ciao
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    struct _NOTIFIES{
           long event;
           long notify;
           struct _NOTIFIES* pointer;
    };
    typedef struct _NOTIFIES* NOTIFIES;
    NOTIFIES NewNotify(NOTIFIES notifies,long event, long notify);
    
    
    int main()
    {
        NOTIFIES n=NULL;
        
        n=NewNotify(n,7,8);
        printf("primi valori inseriti: %d  %d \n",n->event,n->notify);
        
        n=NewNotify(n,9,80);
        printf("primi valori inseriti: %d  %d \n",n->event,n->notify);
        
        n=n->pointer;
        printf("altri valori inseriti: %d  %d \n",n->event,n->notify);
        
        system("pause");
        return 0;
    }
    
    NOTIFIES NewNotify(NOTIFIES notifies,long event, long notify)
    {
        NOTIFIES cursor, ptr;
        if(notifies==NULL)
        {
            notifies=(NOTIFIES)malloc(sizeof(struct _NOTIFIES));
            if(ptr!=NULL)
            {
                notifies->event=event;
                notifies->notify=notify;
                notifies->pointer = NULL;
            }
        }
        else
        {
            ptr=notifies;
            while( ptr->pointer != NULL ){
                 ptr=ptr->pointer;
            }
            cursor=(NOTIFIES)malloc(sizeof(struct _NOTIFIES));
            if(cursor!=NULL)
            {
                cursor->event=event;
                cursor->notify=notify;
                cursor->pointer=NULL;
                ptr->pointer = cursor;
            }
        }
        return notifies;
    }
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    95
    Perfetto, ora funziona! Grazie!

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.