ACCEDI

Password dimenticata?

×
Seguici su Instagram Feed RSS Seguici su YouTube
Pagina 3 di 6 PrimaPrima 123456 UltimaUltima
Visualizzazione risultati da 21 a 30 su 60

[C] - le liste, qualcuno ne sa qualcosa?

  1. #21
    Tyler Durden
    Uomo 37 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    ma non bisognerebbe rilasciare la mem allocata?
    io non lo faccio mai perchè non saprei QUANDO farlo


  2. #22
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    Quote Originariamente inviata da Technics Visualizza il messaggio
    ma non bisognerebbe rilasciare la mem allocata?
    io non lo faccio mai perchè non saprei QUANDO farlo
    Ti riferisci al fflush(stdin)? Ogni volta che schiacci un tasto, il suo valore viene riposto in un buffer. Quando tu chiami scanf(), è come se andassi a leggere il contenuto di tale buffer, ma niente ti assicura che il buffer venga svuotato quando richiami scanf(). Se non viene svuotato (e capita spesso) scanf() legge lo stesso valore di prima, e tu sei punto a capo =) Adesso stai usando gcc su OS X o su linux? O stai usando win? Perché il funzionamento di scanf non sempre è lo stesso...

    *dimenticavo, in conclusione usi fflush(stdin) prima di ogni scanf() o subito dopo, in modo da garantire che alla prossima chiamata di scanf il buffer sia vuoto. Se lo fai prima di chiamare scanf, sei sicuro al 100% che il buffer sia vuoto

  3. #23
    Tyler Durden
    Uomo 37 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    no ,perdonami.. mi sono piegato male mi riferivo al free()

    ma non ti sto facendo studiare?

    sto usando OS X cmq uso quasi sempre mac per studiare.. o al max linux.. mai provato un dev C su win

  4. #24
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    su os x il problema si presenta e non si presenta, dipende.. cmq per sicurezza usa fflush
    Il free lo usi quando deallochi, ovvero quando non ti serve più un elemento e, per tenere tutto più ordinato e dar spazio all'efficienza, lo elimini dalla memoria (sbianchi un pezzettino di ram ).

  5. #25
    Tyler Durden
    Uomo 37 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    preiser dopo un pomeriggio intero devo inchinarmi.. sto man mano facendo mie le liste.. e stano diventando meno ostiche di quanto credevo che fossero.. grazie, grazie grazie e grazie..
    ho ancora solo una domanda per il momento..

    perchè scriviamo ad esempio
    lista=NULL
    e non
    lista->succ=NULL
    ?

  6. #26
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    In C, come in ogni altro linguaggio, appena dichiari una variabile, inizializzala, altrimenti vai incontro a inconvenienti. In generale i compilatori inizializzano le variabili a dei valori "standard": gli int a 0, i char a 0, i float a 0, ma i puntatori.. eheh, dipende!
    Fai una prova (se vuoi) col codice che ti posto. A me, su OS X, ha dato risultati diversi a ogni chiamata di printf. Se tu avessi usato il puntatore senza assegnarli NULL, avresti fatto un grosso errore!
    Regola d'oro del C: inizializza tutto subito!

    PS: cosa succede se utilizzi un puntatore non inizializzato? Semplicemente, non sai cosa può accadere, nel senso che il puntatore può puntare ad una qualsiasi area di memoria che (nel 99.9999% dei casi) non contiene quel che ti serve. In sunto, il programmino crasha


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char *pointer;
        printf("Indirizzo a cui punta il puntatore: %d", pointer);
        pointer = NULL;
        printf("\nIndirizzo a cui punta il puntatore dopo l'inizializzazione: %d", pointer);
        pointer = (char *)malloc(sizeof(char));
        printf("\nIndirizzo a cui punta il puntatore dopo il malloc(): %d", pointer);
        return 0;
    }

  7. #27
    Tyler Durden
    Uomo 37 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    si si, questo lo sapevo.. infatti in genere punta ad un indirizzo che nemmeno può aprire e crasha.. la mia domanda era..

    lista è un puntatore
    lista->succ è un puntatore

    perchè inizializziamo lista così
    lista=NULL
    e non inizializziamo lista->succ così
    lista->succ=NULL
    ?

    il secondo caso genera un errore

  8. #28
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    Quote Originariamente inviata da Technics Visualizza il messaggio
    si si, questo lo sapevo.. infatti in genere punta ad un indirizzo che nemmeno può aprire e crasha.. la mia domanda era..

    lista è un puntatore
    lista->succ è un puntatore

    perchè inizializziamo lista così
    lista=NULL
    e non inizializziamo lista->succ così
    lista->succ=NULL
    ?

    il secondo caso genera un errore
    Uhm, sono un po' fuso, forse non ho capito bene io o forse non l'ho spiegato prima. Appena creai un puntatore, qualunque esso sia, o lo inizializzi con un valore o lo setti subito a NULL. Io per abitudine, scrivo così:
    char *puntatore = NULL;
    puntatore = (char *) malloc(12345 * sizeof(char));


    o così:
    char *puntatore = (char *)malloc(12345 * sizeof(char));

    sono entrambi equivalenti, ma l'importante è che non lo lasci in sospeso. Facciamo lista->succ = NULL così tappiamo subito il puntatore al prossimo elemento, perché in quel punto del codice non è detto che sai già se esisterà o meno un prossimo elemento.
    Poi dimmi se non ho capito a cosa ti riferisci, sorry

  9. #29
    Vivo su FdT
    Uomo 36 anni da Milano
    Iscrizione: 30/4/2005
    Messaggi: 3,821
    Piaciuto: 12 volte

    Predefinito

    Ah aspetta, forse ho capito. Ti riferisci proprio alle prima righe del codice?

    lista myList = NULL;

    e mi chiedi come mai non facciamo
    myList->succ = NULL;

    ? Se sì, non lo possiamo proprio fare, perché myList non punta da nessuna parte, e non avendo allocato spazio per una nuova struttura (e non avendo neanche l'indirizzo di memoria in cui è allocata questa struttura) non possiamo puntare a succ.

  10. #30
    Tyler Durden
    Uomo 37 anni
    Iscrizione: 6/10/2007
    Messaggi: 16,094
    Piaciuto: 523 volte

    Predefinito

    aaaaaaah ok ok ci sono ..

Pagina 3 di 6 PrimaPrima 123456 UltimaUltima

Discussioni simili

  1. Una soddisfazione grande... Niente + liste!
    Da jacka nel forum Amici animali
    Risposte: 4
    Ultimo messaggio: 9/7/2008, 23:57
  2. qualcuno ne capisce qualcosa?
    Da Jack Ass nel forum Internet e computer
    Risposte: 26
    Ultimo messaggio: 3/1/2008, 4:38
  3. qui qualcosa non quadra....
    Da Patu nel forum Off Topic
    Risposte: 32
    Ultimo messaggio: 21/2/2006, 21:23