我有一个需要像这样的指针的结构,并且我想为其清除分配内存,但是我担心如果一个实例多次使用它,那么我将遇到问题。这是我的意思:
结构体
typedef struct STRUCTPTR STRUCTPTR;
STRUCTPTR *STRUCTPTR_init();
structptr.c
struct STRUCTPTR
{
char *t1;
int t2;
float t3;
double t4;
};
STRUCTPTR *STRUCTPTR_init()
{
STRUCTPTR *temp = calloc(4, sizeof (struct STRUCTPTR));
if (!temp)
return NULL;
return temp;
}
main.c
#include "structptr.h"
int main(void)
{
STRUCTPTR *s = STRUCTPTR_init();
s = STRUCTPTR_init();
return 0;
}
最佳答案
如果我理解您的观点是正确的,那么您想创建该结构(如果尚未创建),但是如果已经创建,那么您什么都不要做?
可以通过按注释中的要求将指针作为参数来完成。只需记住在第一次调用该函数之前先将指针设置为NULL
。
STRUCTPTR *STRUCTPTR_init(STRUCTPTR *old)
{
if (old == NULL)
old = malloc(...);
return old;
}
/* ... */
STRUCTPTR *p = NULL;
p = STRUCTPTR_init(p);
/* ... */
p = STRUCTPTR_init(p);