PDA

Visualizza la versione completa : [C] Puntatore dentro struttura globale


W3bm@st3r
14-02-2012, 12:12
Ciao! non capisco la sintassi per modificare un valore puntato dentro una struttura che è puntata a sua volta:



struct esempio{ int *vita; };
struct *esempio link;

funz1(){
int vita = 1;

link->vita = &vita;
}

funz2(){
link->vita--;
}




Sicuramente sbaglio sia ad inserire il valore che poi a modificarlo. Qualcuno mi puo aiutare? Grazie in anticipo.

oregon
14-02-2012, 12:24
Intanto deve essere

struct esempio *link;

e non come hai scritto.

Poi, bisogna allocare una struttura con una malloc per usare link ...

W3bm@st3r
14-02-2012, 12:32
Chiedo scusa per l'imprecisione del codice riportato. In realtà il codice nel programma è giusto, infatti gli altri campi (che per semplificazione non ho riportato) li leggo tranquillamente all'interno della funz2:



struct esempio{ int *vita; };
struct esempio *link;

funz1(){
struct esempio *link;
int vita = 1;

link = (struct esempio*)malloc(sizeof(struct esempio));

link->vita = &vita;
}

funz2(){
link->vita--;
}

oregon
14-02-2012, 12:36
Perché hai un link globale e uno locale?

E poi, non è corretto assegnare l'indirizzo di una variabile locale (int vita) perché all'uscita dalla funzione non sarà più valida.

Infine, se vuoi diminuire il valore del valore puntato devi scrivere

(*link->vita)--;

W3bm@st3r
14-02-2012, 14:43
Ho risolto grazie alla sintassi che mi hai scritto nell'ultimo messaggio. Grazie mille!

Ogni funzione viene eseguita da un thread quindi l'unico modo di comunicare che avevo senza usare variabili globali era di inserire un puntatore all'interno della struttura che già veniva inviata per altri motivi

oregon
14-02-2012, 14:55
Prego ... ma occhio all'indirizzo della variabile locale perché avrai problemi ...

Loading