2012-04-08 21 views
14

Tengo un problema al pasar un puntero a una estructura a una función. Mi código es esencialmente lo que se muestra a continuación. Después de llamar a modify_item en la función principal, cosas == NULL. Quiero que las cosas sean un puntero a una estructura de elemento con un elemento igual a 5. ¿Qué estoy haciendo mal?Pasando el puntero struct a la función en 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? 
} 

Respuesta

22

Debido a que usted está pasando el puntero por valor. La función funciona con una copia del puntero y nunca modifica el original.

O pase un puntero al puntero (es decir, struct item **), o en su lugar haga que la función devuelva el puntero.

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(); 
} 
Cuestiones relacionadas