Autore Topic: Restituire una lista di valori in C  (Letto 3666 volte)

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Restituire una lista di valori in C
« Risposta #15 il: 07 Gennaio 2012, 01:58:11 »
Citazione da: "TheKaneB"

Nel tuo caso specifico, devi anche decidere se e come cancellare il contenuto delle celle della lista, oltre alla lista stessa.
Quindi se fai delle funzioni come:

List* myLib_listCreate();
void myLib_function(List *output, .... );
void myLib_listDispose(List *list);

Mi sto accorgendo di una cosa: se il client non sa quanti risultati restituirà la funzione, non credo abbia molto senso fargli allocare della memoria.
Almeno che la funzione myLib_listCreate() non serva semplicemente per creare un puntatore e dargli il valore NULL. Poi lo stesso puntatore, eventualmente modificato dalla funzione di libreria, verrà passato alla funzione per la disallocazione. Cosa ne pensate?
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Restituire una lista di valori in C
« Risposta #16 il: 07 Gennaio 2012, 02:08:19 »
che c'entra? il client alloca solo l'head della lista. Gli altri elementi sono aggiunti in coda dalla funzione list_add che ho mostrato prima.
Il dispose poi scorre e dealloca iterativamente tutti i nodi.

ps: ti conviene usare sempre un elemento vuoto in testa alla lista, chiamato head o sentry, ti serve per semplificare molti casi ed evitare schifezze tipo il passaggio di puntatori doppi a funzioni che devono modificare la lista.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Restituire una lista di valori in C
« Risposta #17 il: 07 Gennaio 2012, 09:39:53 »
Citazione da: "TheKaneB"
che c'entra? il client alloca solo l'head della lista. Gli altri elementi sono aggiunti in coda dalla funzione list_add che ho mostrato prima.
Il dispose poi scorre e dealloca iterativamente tutti i nodi.

ps: ti conviene usare sempre un elemento vuoto in testa alla lista, chiamato head o sentry, ti serve per semplificare molti casi ed evitare schifezze tipo il passaggio di puntatori doppi a funzioni che devono modificare la lista.
Infatti avevo intenzione di NON usare una lista con sentinella, e allocare solo i nodi reali...per questo ho posto la domanda!
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Restituire una lista di valori in C
« Risposta #18 il: 07 Gennaio 2012, 12:35:08 »
La lista con sentry ti consente di creare un "oggetto lista" vuoto, e di riempirlo in un secondo momento. E' una cosa comoda.
Inoltre ti elimina i casi particolari delle funzioni "add" e "search" ed elimina il bisogno di passare un puntatore doppio alle funzioni che ne manipolano il contenuto.
Certo, puoi farne anche a meno se non ti piace questa convenzione. Non ci sono particolari impatti nelle performance o di overhead, a parte pochi byte sprecati che sono irrisori al giorno d'oggi, ma la trovo una cosa comoda perchè più vicina al paradigma OOP.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Tags: