PDA

Visualizza la versione completa : [C] Allocazioni di memoria per stringhe, strutture e grafi


diantha
02-02-2012, 17:09
Ciao ragazzi sono ancora io...Questa volta volevo delle informazioni sulle allocazioni di memoria.
Sto realizzando un progetto in c,in cui creo un grafo con liste di adiacenza e ovviamente uso anche delle stringhe di supporto nel main ecc.

La struttura del grafo è questa:



#define N 80

struct nodo_lista_adiacenti
{
int info;
struct nodo_lista_adiacenti *next;//successivo nodo della lista
};

struct vertice
{
char info[N];
char colore[30];
int distanza_precedente;
int predecessore;
int tempo_inizio_visita;
int tempo_fine_visita;
struct nodo_lista_adiacenti *punt;
};



il grafo lo creo in questo modo:



int main(int argc, char *argv[])
{
char stringa1[N], stringa2[N];
int dim, i;
struct nodo_lista_adiacenti *lista= NULL;

struct vertice grafo[N];//lo chiamo grafo
.......

}
struct vertice grafo[N];

Vorrei sapere se devo allocare in memoria tutto quello che uso nel progetto,per esempio le stringhe di supporto iniziali,e anche l'array di vertici cioè il grafo (tutte le liste le alloco già quando le creo quindi va bene...)...Sto iniziando da qualche giorno c quindi sono ancora in confusione con queste allocazioni :dhò:

grazie...

tiro1997
03-02-2012, 10:28
In generale, sulle allocazioni dinamiche in memoria, considera che al di là delle varie differenze una delle discriminanti principali è il tempo di vita delle variabili . Se allochi nello stack (dichiari localmente) il tempo di vita della variabile dura finchè dura la visibilità della variabile.
Se allochi dinamico (nel heap ad es con malloc etc. ) il tempo di vita è uguale a quello del programma o finchè non deallochi volontariamente (con free), a quel punto devi solo stare attento a non perderti il puntatore.
Questo come regola generale sulle allocazioni dinamiche ed è uno dei principali criteri per scegliere se una variabile ti serve allocata dinamica o no. Ripeto : vale in generale, indipendentemente dal grafo che stai facendo

Spero la spiegazione sintetica sia chiara...

Loading