2012-04-08 15 views
14

Sto riscontrando un problema con il passaggio di un puntatore a una struttura in una funzione. Il mio codice è essenzialmente ciò che è mostrato di seguito. Dopo aver chiamato modify_item nella funzione principale, roba == NULL. Voglio che roba sia un puntatore a una struttura di item con elemento uguale a 5. Cosa sto facendo di sbagliato?Passaggio del puntatore di struct per funzionare in c

void modify_item(struct item *s){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    s = retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    modify_item(stuff); //After this call, stuff == NULL, why? 
} 

risposta

22

Perché si passa il puntatore per valore. La funzione opera su una copia del puntatore e non modifica mai l'originale.

Passare un puntatore al puntatore (ad esempio un struct item **) o invece restituire il puntatore alla funzione.

17
void modify_item(struct item **s){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    *s = retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    modify_item(&stuff); 

o

struct item *modify_item(void){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    return retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    stuff = modify_item(); 
} 
Problemi correlati