Allocate space for struct pointer in subfunction

前端 未结 4 1732
死守一世寂寞
死守一世寂寞 2020-12-22 03:40

How can I allocate memory for a struct pointer and assign value to it\'s member in a subfunction?

The following code will compile but not execute:

#i         


        
4条回答
  •  我在风中等你
    2020-12-22 03:52

    You are passing s by value. The value of s is unchanged in main after the call to allocate_and_initialize

    To fix this you must somehow ensure that the s in main points to the memory chunk allocated by the function. This can be done by passing the address of s to the function:

    // s is now pointer to a pointer to struct.
    void allocate_and_initialize(struct _struct **s)
    {
            *s = calloc(sizeof(struct _struct), 1); 
            (*s)->str = calloc(sizeof(char), 12);
            strcpy((*s)->str, "hello world");                                                                                                                                                                      
    }
    int main(void)
    {
            struct _struct *s = NULL;  // good practice to make it null ptr.
            allocate_and_initialize(&s); // pass address of s.
            printf("%s\n", s->str);
    
            return 0;
    }
    

    Alternatively you can return the address of the chunk allocated in the function back and assign it to s in main as suggested in other answer.

提交回复
热议问题