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
", 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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…