|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
[C/C++] Dubbio sulle liste
Un dubbio che vorrei levarmi:
Una lista è una struttura dati globale? Nel momento in cui inserisco gli elementi usando una funzione, la lista che viene creata resta a disposizione di tutto il programma, come se fosse una sorta di variabile globale, giusto? E rimane in memoria finchè è aperto il programma che la sta trattando. Giusto?
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
No, funziona come tutte le altre strutture, quindi secondo le regole di scoping classiche.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2011
Messaggi: 39
|
No, la lista non è altro che un tipo di struttura dati (quindi ha lo stesso funzionamento delle altre strutture) dove uno dei campi della struttura è un puntatore ad un altro nodo della lista. Stop. Devi immaginare come se gli anelli di una catena sono i nodi, e i "ganci" sono i puntatori ai nodi successivi.
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
Quote:
E In memoria ci sta finchè non muore il programma che la sta gestendo?
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Quote:
Idem per quanto riguarda l'allocazione.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2011
Città: Cassino
Messaggi: 326
|
se la dichiari prima del main per esempio, la puoi usare all'interno del main e di tutto le procedure e funzioni che seguono...
poi, in una lista, che fa uso di puntatori, ci puoi mettere quanti campi vuoi, (tipo nome, cognome, età, codice fiscale) basta che alla fine metti uno (o due nel caso di lista doppiamente linkata) puntatori che puntano alla stessa lista... es: struct nodo { int valore; nodo *succ; nodo *prec; }; class lista { nodo *l; ... ... ... }; spero di esserti stato di aiuto... |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12883
|
Quote:
Tuttavia gli strumenti per accedere a quelle zone di memoria possono essere definiti localmente, vedi i puntatori. Potresti avere situazioni in cui perdendoti un puntatore non riesci più accedere all'area di memoria, pur essendo dal punto di vista teorico accessibile da tutto il processo: Codice:
void func()
{
char* buffer = malloc( ... ); // alloco nell'heap
return;
/* esco dalla funzione,
sto perdendo il riferimento perché
il puntatore è nello stack della funzione
stessa
*/
}
int main(void)
{
func();
getchar();
return 0;
}
Dopodiché, in teoria quando un programma termina il SO marca le aree utilizzate come disponibili per altri processi. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:05.




















