在C中,函数可能会返回指向该函数动态分配的内存的指针,并要求调用代码释放它。通常要求调用代码向第二个函数提供缓冲区,第二个函数然后设置该缓冲区的内容。例如:返回一个指向动态分配结构的指针,而不是从调用函数分配内存?
struct mystruct {
int a;
char *b;
};
struct mystruct *get_a_struct(int a, char*b)
{
struct mystruct *m = malloc(sizeof(struct mystruct));
m->a = a;
m->b = b;
return m;
}
int init_a_struct(int a, char*b, struct mystruct *s)
{
int success = 0;
if (a < 10) {
success = 1;
s->a = a;
s->b = b;
}
return success;
}
是一种方法还是其他方法?我可以想到两个参数:对于get_a_struct方法,调用代码被简化了,因为它只需要返回结构体;对于init_a_struct方法来说,由于调用代码本身可能分配了内存,因此调用代码将不能动态分配内存,因此调用代码将失败。
您不能释放()由.dll分配的结构。 (至少我不认为你可以。)所以,如果你正在搞乱dll,要小心。 – Jiminion
init_a_struct可以更有效率,因为结构可以重用。 –
@Jim然后让.dll提供一个可以释放给定结构的函数。 – glglgl