Suppose I have the following struct and function returning a pointer:
typedef struct {
int num;
void *nums;
int size;
} Mystruct;
Mystruct *mystruct(int num, int size)
{
//Is the following correct? Is there a more efficient way?
Mystruct mystruct;
mystruct.num = num;
mystruct.size = size;
mystruct.nums = malloc(num*sizeof(size));
Mystruct *my;
*my = mystruct;
return my;
}
I want to define any Mystruct pointer using the above function. Should I declare a Mystruct variable, define the properties of Mystruct, assign a pointer to it, and return the pointer or define the properties of a mystruct property through a pointer immediately?
Definitely not, because the variable defined in the function (in “auto” storage class) will disappear as the function exits, and you’ll return a dangling pointer.
You could accept a pointer to a
Mystruct(caller’s responsibility to allocate that) and fill it in; or, you can usemallocto create a new one (caller’s responsibility to free it when it’s done). The second option at least lets you keep the function signature you seem to be keen on:but it’s often an inferior one — since the caller has to have responsibilities anyway, may as well go with the first option and potentially gain performance (if the caller can use an auto-class instance because it knows the scope of use is bounded).