我有一个需要像这样的指针的结构,并且我想为其清除分配内存,但是我担心如果一个实例多次使用它,那么我将遇到问题。这是我的意思:

结构体

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);

08-16 19:33