2012-04-08 36 views
14

Ich habe ein Problem mit der Übergabe eines Zeigers an eine Struktur an eine Funktion. Mein Code ist im Wesentlichen das, was unten gezeigt wird. Nach dem Aufruf von modify_item in der Hauptfunktion stuff == NULL. Ich will, dass Zeug ein Zeiger auf eine Item-Struktur mit Element gleich 5 ist. Was mache ich falsch?Übergabe von Strukturzeiger an Funktion 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? 
} 

Antwort

22

Weil Sie das Bestehen der Zeiger von Wert. Die Funktion arbeitet mit einer Kopie des Zeigers und ändert niemals das Original.

Entweder übergeben Sie einen Zeiger auf den Zeiger (d. H. A struct item **), oder stattdessen die Funktion den Zeiger zurückgeben.

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); 

oder

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(); 
} 
Verwandte Themen