2012-04-08 78 views
14

Tôi gặp sự cố khi chuyển con trỏ tới cấu trúc đến hàm. Mã của tôi về bản chất là những gì được hiển thị bên dưới. Sau khi gọi modify_item trong hàm main, stuff == NULL. Tôi muốn các công cụ được một con trỏ đến một mục cấu trúc với phần tử bằng 5. Tôi đang làm gì sai?Chuyển con trỏ cấu trúc đến hàm trong 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? 
} 

Trả lời

22

Vì bạn đang chuyển con trỏ theo giá trị. Hàm này hoạt động trên một bản sao của con trỏ và không bao giờ sửa đổi bản gốc.

Hoặc chuyển con trỏ tới con trỏ (ví dụ: struct item **) hoặc thay vào đó có hàm trả về con trỏ.

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

hoặc

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(); 
} 
Các vấn đề liên quan