|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2002
Città: Cavalese
Messaggi: 2093
|
[C] passaggio dati tra liste e tra funzioni; cancello i dati ogni volta!
Devo scrivere un software per la gestione di uno strumento di rilevazione.
La parte in assembler che gestisce l'hardware mi gira e non ve la sto neanche a far vedere, e la parte dopo di archiviazione in C quando ho i dati puliti da gestire al calcolatore che mi "incarta". Praticamente faccio così: passo una terna di dati ad una funzione1 e la funzione dopo aver fatto qualche operazione mi restituisce un elenco1. La funzione1 è richiamata più volte. definisco elenco1; elenco1=funzione1(valX,valY,valZ); Ora il problema, dentro la funzione1 mi creo la lista elenco2, la creo e la inizializzo, poi in uscita elenco2 diventa elenco1 nel main. funzione1(x,y,z) {definisco elenco2; inizializzo elenco2; metto x,y,z dentro a elenco2; operazioni1(elenco2); operazioni2(elenco2); ... return elenco2; /*che diventa elenco1 nel main*/ } ogni volta che vado a richiamare la funzione1 dichiaro, inizializzo e quindi azzero nuovamente elenco2 e di riflesso elenco1 in uscita...e mi perdo tutti i dati precedenti! Da qualche parte devo pur dichiarare e inizializzare la lista elenco2, dove e come faccio a non perdere i dati precedenti ogni volta? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Forse non ho capito il tuo problema, io però proverei con un array o una lista
__________________
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2002
Città: Cavalese
Messaggi: 2093
|
Quote:
O devo mettere una altra lista di supporto? |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Certo che se dichiari un buffer dentro una funzione, all'uscita della funzione quel buffer non esiste più. Così facendo sta nello stack.
Puoi passare alla func un puntatore, nella func fare la malloc e caricare i dati... buona fortuna con le free ![]()
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jan 2002
Città: Cavalese
Messaggi: 2093
|
Quote:
Il problema è che per far funzionare la lista dentro alla funzione devo mettere il primo puntatore a NULL, ogni volta che richiamo la funzione rimetto il puntatatore a NULL e azzero la lista (elenco2), poi la passo fuori e azzero di conseguenza anche la lista fuori (elenco1)! |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2002
Città: Cavalese
Messaggi: 2093
|
Quote:
main definisco elenco1; inizializzo elenco1;=NULL elenco1=funzione1(elenco1,valX,valY,valZ); funzione1(elenco2,x,y,z) {metto x,y,z dentro a elenco2; operazioni1(elenco2); operazioni2(elenco2); return elenco2;} /*che diventa elenco1 nel main*/ L'accendiamo? |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
Il puntatore e l'area devi fartela passare nelal funzione o, appunto, fare una malloc ma con un puntatore che NON dichiari nella funz!
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla Ultima modifica di Marco Giunio Silano : 07-09-2006 alle 07:18. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:35.